2010-12-08 61 views
4

我一直在這個問題上停留了幾天。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

回答

15

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

4

在導軌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 %> 

同樣爲所有表單標籤。