2013-04-13 20 views
10

Sto cercando di salvare un array utilizzando la gem di strong_parameters. Ma sto avendo problemi con il modo in cui il modulo invia il mio array. I params simile a questa:Serialize array with strong_parameters

> params[:circuit] 
=> {"title"=>"Some title", ..., "viewable_tasks"=>{"0"=>"woop", "1"=>"dee", ...}} 

E la mia funzione circuit_params assomiglia:

def circuit_params 
    params.require(:circuit).permit(:title, :id, viewable_tasks: { }, ...) 
end 

io non riesco a ottenere la sintassi per permettere ai miei params di lavorare. Quello che ricevo nella mia console è:

> circuit_params 
=> {"title"=>"implement plug-and-play mindshare", 
"viewable_tasks"=>{"0"=>nil, "1"=>nil, "2"=>nil}, ... 

Nel mio modello ho:

class Circuit < ActiveRecord::Base 
    serialize :viewable_tasks, Array 
    ... 
end 

ho notato che posso farlo funzionare correttamente con gli attributi che io chiamo accepts_nested_attributes_for su, quindi questo può avere qualcosa a che fare con esso.

Grazie per qualsiasi aiuto

risposta

14

Ho appena avuto lo stesso problema e questo era la sintassi corretta:

def circuit_params 
    params.require(:circuit).permit(:title, :id, {:viewable_tasks => []}, ...) 
end 
+1

Grazie! grazie grazie! –

-1

provare a utilizzare questo:

def circuit_params 
    params.require(:circuit).permit(:title, :id, viewable_tasks:[], ...) 
end 
+1

Questo non funziona per me. Ottengo un errore di sintassi. –

+1

Come ho detto, gli hash devono necessariamente essere alla fine dei parametri di autorizzazione – Hamdan

0

gli elementi serializzati devono essere in fine dei parametri del permesso. Nella mia esperienza (e non so esattamente perché), non puoi inserire un altro oggetto non serializzato dopo un serializzato ... prova e faccelo sapere.

+1

È a causa della sintassi Ruby. Non è una limitazione di Rails. Ruby consente a un hash di essere alla fine di un elenco di parametri senza racchiuderlo in {parentesi}. Se un hash non è alla fine, deve essere in parentesi graffe. –

+0

lol .. non lo sapevo .. grazie ... ma perché? – Hamdan

+0

Non so perché, @Hamdan. La possibilità di lasciare le parentesi graffe su un hash alla fine è probabilmente per comodità e leggibilità e per incoraggiare una convenzione di un hash che è l'ultimo parametro. Nel metodo Rails 'permit', BTW, puoi totalmente mettere un hash all'inizio o al centro della lista se usi le parentesi graffe. –