Переменная экземпляра против символа в рубине на рельсах (form_for)
Я новичок в ruby on rails и работаю с версией 2.3 на mac osx.
Я пытаюсь создать ту же функциональность, которую создает эшафот, но сам по себе.
Я создал "пост" контроллер, представление и модель.
в пост-контроллере у меня есть следующее:
class PostController < ApplicationController
def index
end
def new
@post = Post.new
end
end
в new.html.erb, у меня есть следующее:
<h1>New Post</h1>
<% form_for :post do |f| %>
<%= f.text_field :title %>
<% end %>
Я заметил, что в коде, создаваемом эшафотом, используется переменная экземпляра @post для form_for helper. почему они используют переменную экземпляра в форме сгенерированного леса, если передают символ: post в form_for делает то же самое, в то время как для символа требуется изменить конфигурацию маршрутов?
Большое вам спасибо,
Юваль
Ответы
Ответ 1
если вы используете символ: post его создает
<form action="/posts" method="post">
если вы используете экземпляр @post
для @post = Post.new вы получите
<form action="/posts/create" class="new_account" id="new_account" method="post">
для @post = Post.find(1) вы получите
<form action="/posts/update" class="edit_account" id="edit_account_1" method="post">
<input name="_method" type="hidden" value="put">
если у вас разные формы для вашего нового, и ваше редактирование не имеет большого значения, но более похоже, чем ваши новые, и ваши формы редактирования будут идентичны или близки к нему.
поэтому, если вы используете переменную экземпляра @post, вы можете поместить весь код формы в _form и просто вызвать партию, и она будет обрабатывать остальные на основе того, будет ли вы передавать новую запись или существующую запись
Ответ 2
Одна из возможных причин заключается в том, что он создает код формы для создания нового сообщения, более похожего на код формы для обновления существующего сообщения.