2010-04-09 72 views
12

我想获得一些嵌套参数。我有一个有很多项目的订单,这些项目都有一个类型。我想从控制器的create方法中获取type_id参数。如何访问嵌套参数

@order = Order.new(params[:order]) 
@order.items.each do |f| 
    f.item_type_id = Item_type.find_by_name(f.item_type_id).id 
end 

原因是我希望用户能够在视图中创建新的item_types。当他们这样做时,我使用AJAX调用将它们添加到数据库。当他们发布的形式,我得到的item_type_id参数的ITEM_TYPE的名字,我想找到正确的ITEM_TYPE和ID设置为

+1

你应该更具体。你想在哪里得到这个参数?在控制器中更新/创建方法?或者鉴于新的/编辑行动?添加一些代码 - 它总是让你更容易猜到你想要的东西:) – klew 2010-04-09 20:31:26

+0

在那里,更新了这个问题:)有点急,当我发布它 – Flexo 2010-04-10 05:50:44

回答

26

params访问嵌套领域做到以下几点:

params[:order][:items_attributes].values.each do |item| 
    item[:type_id] 
end if params[:order] and params[:order][:items_attributes] 

以上解决方案仅适用于宣布了正确的关联和accepts_nested_attributes_for

class Order < ActiveRecord::Base 
    has_many :items 
    accepts_nested_attributes_for :items, :allow_destroy => true 
end 

class Item < ActiveRecord::Base 
    belongs_to :order 
end 
+0

@KandadaBoggu!爱的爱 – 2010-04-09 20:22:54

+0

似乎就是我需要的。然而,我得到一个未定义的方法'值'为零:NilClass - 错误 – Flexo 2010-04-10 05:51:30

+0

它看起来像'params'没有'items_attributes'。打印'params'来检查值。 – 2010-04-10 06:36:30