2010-04-09 3 views
12

Я хотел бы получить некоторые вложенные параметры. У меня есть Орден, у которого много предметов, и у этих предметов есть Тип. Я хотел бы получить параметр 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, добавляя их в db. Когда они отправляют форму я получить имена ITEM_TYPE в item_type_id параметра и я хочу, чтобы найти правильный item_type и установить идентификатор для этого

+1

Вы должны быть более конкретными. Где вы хотите получить этот параметр? В контроллере в методе update/create? Или в новом действии? Добавьте код - всегда легче угадать, чего вы хотите :) – klew

+0

Там, немного обновил вопрос :) поспешил, когда я разместил его – Flexo

ответ

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! love love –

+0

Похоже, это то, что мне нужно. Тем не менее, я получаю неопределенный метод 'values ​​'для nil: NilClass - error – Flexo

+0

Похоже, что' params' не имеет 'items_attributes'. Распечатайте 'params', чтобы проверить значение. –

Смежные вопросы