2013-04-28 53 views
0

我有兩個型號,成份和食物:參數如何傳遞Rails中的嵌套屬性?

class Food < ActiveRecord::Base 

    belongs_to :user 
    has_many :ingredients 

    accepts_nested_attributes_for :ingredients 

    attr_accessible :name, :price 
end 

class Ingredient < ActiveRecord::Base 

    belongs_to :user 
    belongs_to :food 

    attr_accessible :ingredient_name, :quantity_used 
end 

兩個模型的架構如下:

create_table "foods", :force => true do |t| 
    t.string "name" 
    t.integer "user_id" 
    t.float "price" 
    t.string "ingredient_name" 
    end 

    create_table "ingredients", :force => true do |t| 
    t.string "ingredient_name" 
    t.integer "user_id" 
    t.integer "food_id" 
    t.integer "quantity_used" 
    end 

我創建了食品形式還創建/更新成分表格也是如此。我的表單工作正常,提交按鈕更新了正確的屬性,但是我還想更新每個表中的其他屬性。例如,在食品控制員中,我想要做一些類似ingredient.user_id = current_user.id的事情。我明白我可以通過params [:food]訪問所有東西,但是如何訪問未被表單更新的單個字段?

現在,我的形式是:

<%= form_for(@food) do |f| %> 
    <div class="field"> 
    <%= f.label :Name %><br /> 
    <%= f.text_field :name %> 
    </div> 
    <div class="field"> 
    <%= f.label :price %><br /> 
    <%= f.number_field :price %> 
    </div> 
    <div> 
     <%= f.fields_for :ingredients do |builder| %> 
     <%= builder.label "Ingredient Used:" %> 
     <%= builder.text_field :ingredient_name %><br /> 
      <%= builder.label "Quantity Used:" %> 
      <%= builder.text_field :quantity_used %><br /> 
     <% end %> 
    </div> 
    <div class="actions"> 
    <%= f.submit %> 
    </div> 
<% end %> 

如何訪問這個特定食品的配料中的食品#創建行動?

謝謝!

+0

與您先前的問題類似 - http://stackoverflow.com/questions/16073617/how-to-access-nested-parameters-in-rails。另外,看看[文檔](http://api.rubyonrails.org/classes/ActiveRecord/NestedAttributes/ClassMethods.html) – kiddorails 2013-04-28 23:47:11

+0

那裏的答案最初並不適用於我。回想起來,我有一個錯字,現在它起作用了。謝謝。 – 2013-04-29 02:19:53

回答

2

您可能需要在食品模型中添加:ingredients_attributesattr_accessible

您可以通過遍歷:ingredients_attributes或者您可以使用assign_attributes來控制控制器中的params散列。