【问题标题】:Difference between :model and @model in form_for?form_for 中 :model 和 @model 的区别?
【发布时间】:2010-01-14 03:40:13
【问题描述】:

以下方式使用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 操作?

【问题讨论】:

标签: ruby-on-rails


【解决方案1】:

如果您只提供一个模型实例,如 @user 而不指定操作(如您的第一个示例中所示),Rails 会自动为您的表单使用适当的 CRUD 操作:

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

  • 如果@user 是从数据库加载的现有User,则将使用update 操作。

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

像往常一样,API docs 提供更多信息。

【讨论】:

  • 你的解释对我来说比API文档更有帮助。+1
【解决方案2】:

如果您给 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 %>

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-07-27
    • 1970-01-01
    • 2011-09-19
    • 2011-10-26
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多