У чому різниця між form_for та form_tag? Чи є щось інше для form_remote_for та form_remote_tag?
Відповіді:
Ви б використовували 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 -%>
form_forвіддає перевагу, як перший аргумент, об’єкту активного запису; це дозволяє легко створювати або редагувати форму (щоб використовувати її в "новому" поданні, слід створити порожній екземпляр у контролері, наприклад:
def new
@foo = Foo.new
end
Він також передає змінну форми в блок, так що вам не доведеться повторювати ім'я моделі в самій формі. це кращий спосіб написати форму, пов’язану з моделлю.
form_tagпросто створює тег форми (і, звичайно, мовчки підготуйте приховане антифабричне поле, наприклад form_for); його найкраще використовувати для немодельних форм (я насправді використовую його лише для простих форм пошуку тощо).
Точно так же, form_remote_forі form_remote_tagпідходять для пов'язаних з модельними формами , а не моделі форм , пов'язаних відповідно , але, замість того , закінчуючись в стандартному методі HTTP (GET, POST ...), вони називають АЯКС метод.
Все це та багато іншого доступне для вас, щоб насолодитися у FormHelper та PrototypeHelper довідкові сторінки.
РЕДАГУЙТЕ 13.07.2012
Prototypeбуло видалено з railsдавнього часу, а віддалені форми повністю змінені. Будь ласка, зверніться до першого посилання, з урахуванням :remoteваріанту обох form_forі form_tag.
form_for"надає перевагу" об'єкту ActiveRecord?
Вони повинні бути схожими:
<% form_for @person do |f| %>
<%= f.text_field :name %>
<% end %>
і:
<%= form_tag '/person' do %>
<%= text_field_tag "person[name]" %>
<% end %>
Якщо ви хочете надіслати ті самі параметри контролеру, вам доведеться це чітко визначити.