0

在控制器中,我试图访问一个深度嵌套的参数。这是我的参数跟踪。

Parameters:

{"utf8"=>"✓",
 "authenticity_token"=>"2j+Nh5C7jPkNOsQnWoA0wtG/vWxLMpyKt6aiC2UmxgY=",
 "inventory"=>{"ingredients_attributes"=>{"0"=>{"ingredient_name"=>"Bread"}},
 "purchase_date"=>"11",
 "purchase_price"=>"11",
 "quantity_bought"=>"11"},
 "commit"=>"Create Inventory"}

我正在尝试从中检索“面包”。我尝试了params[:inventory][:ingredient][:ingredient_name]其他变体。什么是正确的语法?

如果重要的话,

Inventory has_many :ingredients
Inventory accepts_nested_attributes_for :inventories

谢谢!

4

1 回答 1

1

直接访问值“面包”实际上是:

params[:inventory][:ingredients_attributes]["0"][:ingredient_name]

我敢打赌你不想那样做。

使用accepts_nested_attributes_for该哈希结构(也假设成分属性设置正确),您可以在库存实例上设置参数,并且值“面包”将设置为关联中成分对象之一的成分名称属性:

@inventory = Inventory.new(params[:inventory]) 
# or @inventory.attributes = params[:inventory] for an existing 
# inventory instance

ingredient = @inventory.ingredients.first
ingredient.ingredient_name
# => "Bread"
于 2013-04-18T03:02:29.230 回答