:form_for中的模型和@model之间的区别?

Rya*_*yan 6 ruby-on-rails

使用form_for与以下方法有什么区别:

<% form_for @user do |f| %>
   <%= f.label :name %>:
   <%= f.text_field :name, :size => 40 %>
   ...
<% end %>
Run Code Online (Sandbox Code Playgroud)

和:

<% form_for :user, :url => {:action => 'create'} do |f| %>
   <%= f.label :name %>:
   <%= f.text_field :name, :size => 40 %>
   ...
<% end %>
Run Code Online (Sandbox Code Playgroud)

使用@user只是自动使用CRUD方法进行URL操作吗?

Pär*_*der 7

如果您只是给出一个模型实例,@user而不指定一个动作(如第一个例子中所示),Rails会自动为您的表单使用相应的CRUD操作:

  • 如果@user是未保存的新User对象,则表单将指向您的create操作.

  • 如果@userUser从数据库加载的现有,update则将使用该操作.

这样做的好处是,您可以为视图editnew视图重复使用相同的表单,而无需更改:url表单的参数.

像往常一样,API文档提供了更多信息.


Tom*_*kas 4

如果您给出form_for一个没有实例变量的符号,它将查找具有相同名称的实例变量。

文档说:

例如,如果 @post 是您要编辑的现有记录

<% form_for @post do |f| %>
  ... 
<% end %>
Run Code Online (Sandbox Code Playgroud)

相当于:

<% form_for :post, @post, :url => post_path(@post), :html => { :method => :put, :class => "edit_post", :id => "edit_post_45" } do |f| %>
  ...
<% end %>
Run Code Online (Sandbox Code Playgroud)