2010-01-13 2 views
6

В чем разница между использованием form_for следующим образом:Разница между: моделью и @model в form_for?

<% 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?

+0

Duplicates: http://stackoverflow.com/questions/1582695/ и http://stackoverflow.com/questions/957204/ –

ответ

4

Если вы дадите 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 %> 
7

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

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

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

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

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

+0

Ваши объяснения мне очень полезны, чем API doc .. +1 –

Смежные вопросы