Rails 3以单一格式编辑多条记录

Rails 3以单一格式编辑多条记录

问题描述:

我一直在这个问题上停留了几天。Rails 3以单一格式编辑多条记录

我已经在Railscasts第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

您不能在另一个`form_for`中使用`form_for`,因为这意味着另一个`

`标签中的'
`标签。你**做**需要使用`fields_for`。在Rails 3中运行代码时出现什么错误? – Zabba 2010-12-08 22:04:27
+0

不显示错误。我只是通过提交按钮来获得空白页面。 – 2010-12-08 23:58:24

我找到了解决办法。只需要修改下面一行由瑞安@ 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

在导轨3从<%fields_for至<%= fields_for的变化是因为它被认为混淆的form_for,的form_tag等...使用<%形式...% >即使他们在输出html代码。 随着Rails 3,因为他们输出HTML代码,他们使用<%=。

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

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

应该

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

同样为所有表单标签。