Array di parametri in params

Ciao a tutti,
Spero di non essere OT perchè questa lista non è propriamente rivolta a
Rails, però ci provo lo stesso :slight_smile:

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:

    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:increate’
    app/controllers/pay_checks_controller.rb:79:in each' app/controllers/pay_checks_controller.rb:79:increate’

    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 :wink:

    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.