В чем разница между 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 %>
Если вы хотите отправить те же параметры в контроллер, вам нужно будет это явно определить.