В чем разница между form_for и form_tag? Что-то другое для form_remote_for и form_remote_tag?
Разница между form_for, form_tag?
Ответ 1
Вы использовали бы form_for для конкретной модели,
<% form_for @person do |f| %> # you can use f here
First name: <%= f.text_field :first_name %>
Last name : <%= f.text_field :last_name %>
<% end %>
Form_tag создайте базовую форму,
<%= form_tag '/person' do -%>
<%= text_field_tag "person", "first_name" %>
<% end -%>
Ответ 2
form_for
предпочитает, как свой первый аргумент, объект activerecord; он позволяет легко создать форму или изменить форму (чтобы использовать ее в "новом" представлении, вы должны создать пустой экземпляр в контроллере, например:
def new
@foo = Foo.new
end
Он также передает переменную формы в блок, так что вам не нужно повторять имя модели внутри самой формы. это предпочтительный способ написать модель, связанную с формой.
form_tag
просто создает тег формы (и, конечно же, незаметно подготавливает скрытое поле antiforgery, например form_for
); он лучше всего используется для немодельных форм (я на самом деле использую его только для простых форм поиска и т.п.).
Аналогично, form_remote_for
и form_remote_tag
подходят для связанных с моделью форм, а не для связанных с моделью форм соответственно, но вместо того, чтобы заканчиваться стандартным методом http (GET, POST...), они вызывают ajax метод.дел >
Все это и многое другое доступны для вас в FormHelper и PrototypeHelper справочные страницы.
EDIT 2012-07-13
Prototype
давно удален из rails
, и удаленные формы полностью изменились. Пожалуйста, обратитесь к первой ссылке, с учетом опции :remote
как form_for
, так и form_tag
.
Ответ 3
Они должны быть похожими:
<% form_for @person do |f| %>
<%= f.text_field :name %>
<% end %>
и
<%= form_tag '/person' do %>
<%= text_field_tag "person[name]" %>
<% end %>
Если вы хотите отправить те же параметры в контроллер, вам нужно будет это явно определить.