2010-04-09 18 views
12

Me gustaría obtener algunos parámetros anidados. Tengo una orden que tiene muchos artículos y cada uno tiene un tipo. Me gustaría obtener el parámetro type_id del método create de los controladores.Cómo acceder a los parámetros anidados

@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 

La razón es que quiero que el usuario pueda crear nuevos tipos_telementos en la vista. Cuando lo hacen, uso una llamada AJAX y los agrego a la base de datos. Cuando fijan la forma que consigo nombres de los item_type en el parámetro item_type_id y quiero encontrar la item_type correcta y establecer el id para que

+1

Debe ser más específico. ¿Dónde quieres obtener este parámetro? En el controlador en la actualización/crear método? ¿O a la vista en una acción nueva/editar? Agregue un código - siempre hace que sea más fácil adivinar lo que quiere :) – klew

+0

Allí, actualicé un poco la pregunta :) tenía prisa cuando lo publiqué – Flexo

Respuesta

26

Para acceder a los campos anidados de params haga lo siguiente:

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

La solución anterior funcionará SOLAMENTE si ha declarado las asociaciones correctas y 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! amor amor –

+0

Parece que eso es lo que necesito. Sin embargo, obtengo un método indefinido 'values ​​'para nil: NilClass - error – Flexo

+0

Parece que' params' no tiene 'items_attributes'. Imprima 'params' para verificar el valor. –

Cuestiones relacionadas