Разница между form_for, form_tag? - PullRequest
77 голосов
/ 29 августа 2009

В чем разница между form_for и form_tag? Есть что-нибудь другое для form_remote_for и form_remote_tag?

Ответы [ 3 ]

59 голосов
/ 29 августа 2009

Вы бы использовали 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 -%>
53 голосов
/ 29 августа 2009

form_for предпочитает в качестве первого аргумента объект activerecord; это позволяет легко создавать или редактировать форму (чтобы использовать ее в «новом» представлении, вы должны создать пустой экземпляр в контроллере, например:

def new
  @foo = Foo.new
end

Он также передает переменную формы в блок, чтобы вам не приходилось повторять имя модели внутри самой формы. это предпочтительный способ написать форму, связанную с моделью.

form_tag просто создает тег формы (и, конечно, молча подготавливает скрытое поле, защищающее от подделки, например form_for); лучше всего его использовать для немодельных форм (на самом деле я использую его только для простых форм поиска и т. п.)

Аналогично, form_remote_for и form_remote_tag подходят для связанных с моделью форм и не связанных с моделью форм соответственно, но вместо окончания стандартного метода http (GET, POST ...) они вызывают ajax способ.

Все это и многое другое доступно для вас на справочных страницах FormHelper и PrototypeHelper .

РЕДАКТИРОВАТЬ 2012-07-13

Prototype был удален из rails давно, и удаленные формы полностью изменились. Пожалуйста, обратитесь к первой ссылке, в отношении опции :remote для form_for и form_tag.

4 голосов
/ 23 марта 2016

Они должны быть похожи:

<% form_for @person do |f| %>
  <%= f.text_field :name %>
<% end %>

и

<%= form_tag '/person' do %>
  <%= text_field_tag "person[name]" %>
<% end %>

Если вы хотите передать те же самые параметры контроллеру, вы должны определить это явно.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...