7

我已经被这个问题困扰了几天了。

我在 Railscasts Episode #198 上取得了一些成功,但那是针对 Rails 2 的。Rails 3 中进行了一些更改,因此在 Episode #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

4

2 回答 2

19

我找到了解决方案。只需要在 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.

艾伦罗萨里奥

于 2010-12-09T00:13:00.063 回答
4

Rails 3 中从 <% fields_for 到 <%= fields_for 的变化是因为 form_for、form_tag 等……使用 <% form... %> 令人困惑,即使它们正在输出 html 代码。在 Rails 3 中,由于它们输出 html 代码,它们使用 <%=。

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

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

应该

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

所有表单标签都相同。

于 2011-03-17T06:52:19.030 回答