我已经坚持了几天这个问题了。
我在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
答案 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 %>
所有表格标签都相同。