Rails 3以单一形式编辑多个记录

时间:2010-12-08 01:28:51

标签: forms ruby-on-rails-3 editing railscasts

我已经坚持了几天这个问题了。

我在Railscasts Episode#198上取得了一些成功,但是那个用于Rails 2.Rails 3中有一些变化使得它在第198集中提供的代码无效。

问题出在edit_individual.html.erb:

原始代码(由Ryan @ Railscasts提供):

<% form_tag update_individual_products_path, :method => :put do %>
  <% for product in @products %>
    <% fields_for "products[]", product do |f| %>
      <h2><%=h product.name %></h2>
      <%= render "fields", :f => f %>
    <% end %>
  <% end %>
  <p><%= submit_tag "Submit" %></p>
<% end %>

修改后的代码(只需将fields_for更改为form_for):

<% form_tag update_individual_products_path, :method => :put do %>
  <% for product in @products %>
    <% form_for "products[]", product do |f| %>
      <h2><%=h product.name %></h2>
      <%= render "fields", :f => f %>
    <% end %>
  <% end %>
  <p><%= submit_tag "Submit" %></p>
<% end %>

在新代码中,每个记录都放在一个自己的表单中,所有表单都在一个单独的表单中(这是我唯一想要的表单)。

我的问题是,如何让Railscasts Episode#198提供的代码在Rails 3中运行?

这是我提到的Railscast的链接: http://railscasts.com/episodes/198-edit-multiple-individually

谢谢你, c.allen.rosario

2 个答案:

答案 0 :(得分:18)

我找到了解决方案。只需修改Ryan @ Railscasts提供的代码中的以下行:

<% fields_for "products[]", product do |f| %>

并将其更改为:

<%= fields_for "products[]", product do |f| %>

请注意,<%已修改为<%=

最终解决方案:

<% form_tag update_individual_products_path :method => :put do %>  
  <% for product in @products %>  
    <%= fields_for "products[]", product do |f| %>  
      <h2><%= h product.name %></h2>  
    <% end %>  
  <% end %>  
  <p><%= submit_tag "Submit" %></p>  
<% end %>  

我想知道是否有人能向我解释这个解决方案。根据我的理解,您只需在<%前面fields_for

c.allen.rosario

答案 1 :(得分:4)

Rails 3从&lt;%fields_for更改为&lt;%= fields_for是因为令人困惑的是form_for,form_tag等...正在使用&lt;%form ...%&gt; 即使他们也输出了html代码。 使用Rails 3,因为它们输出html代码,所以使用&lt;%=。

请注意,您的第一行已被弃用:

<% form_tag update_individual_products_path, :method => :put do %>

应该是

<%= form_tag update_individual_products_path, :method => :put do %>

所有表格标签都相同。