2011-08-24 6 views
7

ho un hidden_tag come questo nel mio moduloPassando gamma tramite campi nascosti alle rotaie

<%= f.hidden_field :loc , {:multiple => true} %> 

che rende a

<input id="business_loc" multiple="multiple" name="business[loc][]" type="hidden" style="color: rgb(175, 175, 175); " value=""> 

attualmente sto impostando il valore business_loc come una virgola separati stringa sperando rotaie avrebbe riconoscere quando inviare il modulo. Ma questo è il valore che ho ottenuto sul lato server

 "loc"=>["80.22167450000006,13.0454044"] 

invece

 "loc"=>[80.22167450000006,13.0454044] 

Come faccio a impostare il valore corretto nel campo nascosto, in modo da rotaie può capire correttamente.

+2

A che cosa serve lo styling un campo nascosto? ;-) – Mischa

+0

@mischa, non ne ho idea, ho generato il codice usando il tag hidden_field .. :) – RameshVel

risposta

3

È necessario utilizzare più campi nascosti, uno per ciascun elemento della matrice di valori.

Ad esempio:

<input id="business_loc" multiple="multiple" name="business[loc][]" type="hidden" style="color: rgb(175, 175, 175); " value="80.22167450000006"> 
<input id="business_loc" multiple="multiple" name="business[loc][]" type="hidden" style="color: rgb(175, 175, 175); " value="13.0454044"> 

... se avete bisogno di codice per aggiungere dinamicamente questi con JS, ecco un esempio jQuery:

var field = $('<input id="business_loc" multiple="multiple" name="business[loc][]" type="hidden" style="color: rgb(175, 175, 175); " value="13.0454044">'); 
var form = $('#your-form-id'); 
form.append(field); 
+0

ne ho pensato. ma sto popolando il valore nascosto dal lato client, ed è più difficile in questo modo. perché devo gestire molti valori – RameshVel

+0

Sì, è necessario aggiungere un nuovo elemento in modo dinamico. – Winfield

+0

Cosa succede se ora ho bisogno di avere un ID diverso per ogni input? Perché nello stesso modo in cui sono stati aggiunti con jQuery, ora voglio rimuoverli con il suo ID. –

1

ho trovato text_area di per far funzionare le cose senza dover aggiungere un mucchio di forme nascoste. Basta impostare il valore dell'area di testo su qualcosa che assomiglia a [1,31,51,61] e dovrebbe funzionare, supponendo che nel tuo modello tu abbia serialize :var

1

Ho avuto lo stesso problema di recente. La mia soluzione era gestirla sul lato server semplicemente suddividendo l'array alla virgola. Nel mio caso si presenta così:

# thing_that_has_many_objects.rb  <-- showing custom setter method from the model because my example involves using a virtual attribute 
    # params[object_ids] = ["1,2,3,4,5"] <-- from the form - note the format of array with only one element 

    def objects=(object_ids)  
    split_array = object_ids[0].split(',') 
    split_array.each do |id| 
     self.objects.build(object_id: id) 
    end 
    end 
+0

Come si richiama il setter personalizzato da eseguire? Al fine di rendere la divisione. –