# Array di parametri in params

**URL:** <https://www.ruby-forum.com/t/array-di-parametri-in-params/213035>\
**Category:** IT\
**Created:** [October 21, 2011, 11:34am UTC](https://www.ruby-forum.com/t/array-di-parametri-in-params/213035 "2011-10-21T11:34:03Z")\
**Posts on this page:** 7\
**Page:** 1

<div class="post-metadata">

**Author:** ![luislavena](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/l/0ea827/32.png) [@luislavena](https://www.ruby-forum.com/u/luislavena)\
**Post date:** [October 21, 2011, 11:34am UTC](https://www.ruby-forum.com/t/array-di-parametri-in-params/213035/1 "2011-10-21T11:34:03Z")

</div>

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

---

<div class="post-metadata">

**Author:** ![nimbuz77](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/n/3be4f8/32.png) [@nimbuz77](https://www.ruby-forum.com/u/nimbuz77)\
**Post date:** [October 21, 2011, 11:50am UTC](https://www.ruby-forum.com/t/array-di-parametri-in-params/213035/2 "2011-10-21T11:50:51Z")

</div>

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.

---

<div class="post-metadata">

**Author:** ![nimbuz77](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/n/3be4f8/32.png) [@nimbuz77](https://www.ruby-forum.com/u/nimbuz77)\
**Post date:** [October 21, 2011, 2:18pm UTC](https://www.ruby-forum.com/t/array-di-parametri-in-params/213035/3 "2011-10-21T14:18:45Z")

</div>

Questo l’ho già fatto e i parametri arrivano, ma:

1. posso accedere solamente attraverso un indice items[0] items[1] …
2. e nel primo (es. items[0]) c’è l’indice, mentre nel secondo  
(items[1]) ci sono tutti i parametri insieme. (es  
0descciaovalue2flagtrue)
3. 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

---

<div class="post-metadata">

**Author:** ![nimbuz77](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/n/3be4f8/32.png) [@nimbuz77](https://www.ruby-forum.com/u/nimbuz77)\
**Post date:** [October 21, 2011, 4:14pm UTC](https://www.ruby-forum.com/t/array-di-parametri-in-params/213035/4 "2011-10-21T16:14:30Z")

</div>

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…

---

<div class="post-metadata">

**Author:** ![nimbuz77](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/n/3be4f8/32.png) [@nimbuz77](https://www.ruby-forum.com/u/nimbuz77)\
**Post date:** [October 21, 2011, 2:38pm UTC](https://www.ruby-forum.com/t/array-di-parametri-in-params/213035/5 "2011-10-21T14:38:39Z")

</div>

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:

---

<div class="post-metadata">

**Author:** ![nimbuz77](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/n/3be4f8/32.png) [@nimbuz77](https://www.ruby-forum.com/u/nimbuz77)\
**Post date:** [October 21, 2011, 4:53pm UTC](https://www.ruby-forum.com/t/array-di-parametri-in-params/213035/6 "2011-10-21T16:53:14Z")

</div>

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](http://as.rubyonrails.org/classes/HashWithIndifferentAccess.html)

Il 21/10/2011 16:14, Nimbuzz Zzubmin ha scritto:

---

<div class="post-metadata">

**Author:** ![nimbuz77](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/n/3be4f8/32.png) [@nimbuz77](https://www.ruby-forum.com/u/nimbuz77)\
**Post date:** [October 24, 2011, 1:08pm UTC](https://www.ruby-forum.com/t/array-di-parametri-in-params/213035/7 "2011-10-24T13:08:48Z")

</div>

Ottimo, la tua soluzione funziona alla grande,  
Grazie.
