Разница между: модель и @ модель в form_for? - PullRequest
6 голосов
/ 13 января 2010

В чем разница между использованием form_ для следующего способа:

<% form_for @user do |f| %>
   <%= f.label :name %>:
   <%= f.text_field :name, :size => 40 %>
   ...
<% end %>

и

<% form_for :user, :url => {:action => 'create'} do |f| %>
   <%= f.label :name %>:
   <%= f.text_field :name, :size => 40 %>
   ...
<% end %>

Использует ли @user просто автоматическое использование методов CRUD для действий с URL?

Ответы [ 2 ]

7 голосов
/ 13 января 2010

Если вы просто дадите экземпляр модели наподобие @user без указания действия (как в первом примере), Rails автоматически использует соответствующее действие CRUD для вашей формы:

  • Если @user является новым, несохраненным User объектом, форма будет указывать на ваше create действие.

  • Если @user - это существующий User, загруженный из базы данных, вместо него будет использовано действие update.

Преимущество заключается в том, что вы можете повторно использовать одну и ту же форму для ваших представлений edit и new без изменения параметра :url для ваших форм.

Как обычно, API документы предоставляют дополнительную информацию.

4 голосов
/ 13 января 2010

Если вы даете form_for символ без переменной экземпляра, он ищет переменную экземпляра с тем же именем.

В документации сказано:

Например, если @post является существующим запись, которую вы хотите редактировать

<% form_for @post do |f| %>
  ... 
<% end %>

эквивалентно чему-то вроде:

<% form_for :post, @post, :url => post_path(@post), :html => { :method => :put, :class => "edit_post", :id => "edit_post_45" } do |f| %>
  ...
<% end %>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...