Ciao a tutti,
Spero di non essere OT perchè questa lista non è propriamente rivolta a
Rails, però ci provo lo stesso
Ho bisogno di passare un array di parametri dentro a params[]
Il problema è ce questa lista di parametri è generata dinamicamente con
jQuery e inserita nella pagina.
Ogni riga contiene più parametri ed ha questa forma:
Una volta eseguito il submit, io mi aspetto di avere un array formato
così dentro a params[]:
items[0][:desc]
items[0][:val]
items[0][:flag]
items[1][:desc]
items[1][:val]
items[1][:flag]
e così via…
Quindi vorrei accedere così:
params[:items].each do |i|
logger.debug("–> #{i[:desc]} “);
logger.debug(”–> #{i[:value]} “);
logger.debug(”–> #{i[:flag]} ");
end
Per quello che ho capito per ottenere un array fatto così devo inserire
nell’attributo name una cosa del genere
<input type=“text” name=“items[0][desc] “value=”…”>
Il problema è che non riesco ad accedervi come ho previsto.
Cosa sbaglio?
Grazie
Il 21/10/2011 11:34, Nimbuzz Zzubmin ha scritto:
Per quello che ho capito per ottenere un array fatto cos devo inserire
nell’attributo name una cosa del genere
<input type=“text” name=“items[0][desc] “value=”…”>
giusto
Il problema che non riesco ad accedervi come ho previsto.
cos su due piedi, ti consiglio di mettere un logger.info(params.inspect)
nella
action del tuo controller (altrimenti basta leggere il log, la riga che
comincia
con “Parameters: {… }”), e controllare come ti arrivano i parametri.
successivamente potrai regolarti sul come impostare l’attributo name
negli input
della form e/o come iterare i parametri.
ciao,
A.
Questo l’ho già fatto e i parametri arrivano, ma:
- posso accedere solamente attraverso un indice items[0] items[1] …
- e nel primo (es. items[0]) c’è l’indice, mentre nel secondo
(items[1]) ci sono tutti i parametri insieme. (es
0descciaovalue2flagtrue)
- se tento di accedere come items[0][:desc] ottengo:
TypeError (Symbol as array index):
app/controllers/pay_checks_controller.rb:80:in []' app/controllers/pay_checks_controller.rb:80:in
create’
app/controllers/pay_checks_controller.rb:79:in each' app/controllers/pay_checks_controller.rb:79:in
create’
e alla riga 80 c’è:
params[:items].each do |i|
logger.debug("–> #{i[:desc]}") <- riga 80
end
Infatti stavo per editare il post e aggiungere questo dettaglio, ma non
me lo ha lasciato fare.
{“items”=>{“0”=>{“flaf”=>“true”, “desc”=>“Descrizione”, “value”=>“2”}},
“commit”=>"Create … eccetera
A me sembra anche giusto…
potresti incollare i parametri che ti arrivano con la request? prendilo
dal log,
altrimenti non si capisce il formato
A.
Il 21/10/2011 14:18, Nimbuzz Zzubmin ha scritto:
per iterarlo correttamente, potrestri scrivere qualcosa del genere:
params[:items].each do |key, value|
logger.debug(“–> #{value[:desc]}”)
end
tieni presente che “params[:items]” ti arriva come Hash (nel caso
specifico si
tratta di HashWithIndifferentAccess[1])
[1] http://as.rubyonrails.org/classes/HashWithIndifferentAccess.html
Il 21/10/2011 16:14, Nimbuzz Zzubmin ha scritto:
Ottimo, la tua soluzione funziona alla grande,
Grazie.