2010-04-09 16 views
12

Vorrei ottenere alcuni parametri nidificati. Ho un ordine che ha molti articoli e questi articoli hanno ciascuno un tipo. Mi piacerebbe ottenere il parametro type_id dal metodo di creazione dei controller.Come accedere ai parametri nidificati

@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 

Il motivo è che voglio l'utente sia in grado di creare nuove item_types nella vista. Quando lo fanno uso una chiamata AJAX aggiungili al db. In caso di distacco forma ottengo nomi del item_type nel parametro item_type_id e voglio trovare l'item_type corretta e impostare l'id a quella

+1

Dovresti essere più specifico. Dove vuoi ottenere questo parametro? Nel controller in modalità di aggiornamento/creazione? O in vista in una nuova/modifica azione? Aggiungi un po 'di codice - è sempre più facile indovinare cosa vuoi :) – klew

+0

Lì, ho aggiornato la domanda un po' :) era di fretta quando l'ho postato – Flexo

risposta

26

Per accedere ai campi nidificati dal params effettuare le seguenti operazioni:

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

La soluzione sopra indicata funzionerà SOLO se sono state dichiarate le associazioni corrette e 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

Sembra che sia quello di cui ho bisogno. Tuttavia, ottengo un metodo non definito 'values ​​'per nil: NilClass - error – Flexo

+0

Sembra che' params' non abbia 'items_attributes'. Stampa 'params' per verificare il valore. –

Problemi correlati