使用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是否只为URL操作自动使用CRUD方法?
答案 0 :(得分:7)
如果您只是提供类似@user
的模型实例而未指定操作(如第一个示例中所示),则Rails会自动为您的表单使用相应的CRUD操作:
如果@user
是未保存的新User
对象,表单将指向您的create
操作。
如果@user
是从数据库加载的现有User
,则会使用update
操作。
这样做的好处是,您可以为edit
和new
视图重复使用相同的表单,而无需更改表单的:url
参数。
像往常一样,API docs提供了更多信息。
答案 1 :(得分: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 %>