2011-08-24 11 views
7

tengo un hidden_tag como esto en mi formagama Pasando a través de los campos ocultos a los carriles

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

que hace a

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

actualmente estoy estableciendo el valor business_loc como una coma separados los carriles de cuerda esperando haría reconocer cuando envíe el formulario. Pero este es el valor que me dieron en el lado del servidor

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

lugar

 "loc"=>[80.22167450000006,13.0454044] 

¿Cómo puedo configurar el valor correcto en el campo oculto, por lo que los carriles se puede entender correctamente.

+2

¿De qué sirve diseñar un campo oculto? ;-) – Mischa

+0

@mischa, no tengo idea, generé el código usando la etiqueta hidden_field ... :) – RameshVel

Respuesta

3

Debe usar varios campos ocultos, uno para cada elemento de la matriz de valores.

Por ejemplo:

<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"> 

... si necesita código para añadir dinámicamente estos con JS, aquí hay un ejemplo de 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

pensé en eso. pero estoy poblando el valor oculto del lado del cliente, y es más difícil de esta manera. porque necesito manejar la gran cantidad de valores – RameshVel

+0

Sí, necesitará agregar dinámicamente un nuevo elemento. – Winfield

+0

¿Qué pasa si ahora necesito tener una identificación diferente para cada entrada? Porque de la misma manera que se agregaron con jQuery, ahora quiero eliminar cualquiera de ellos por su ID. –

1

que he encontrado text_area de que las cosas funcionen sin tener que agregar un montón de formas ocultas. Simplemente establezca el valor del área de texto en algo que se parece a [1,31,51,61] y debería funcionar, suponiendo que en su modelo tenga serialize :var

1

Tuve este mismo problema recientemente. Mi solución fue manejarlo en el lado del servidor simplemente dividiendo la matriz en la coma. En mi caso, se ve así:

# 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

¿Cómo se invoca el setter personalizado para ser ejecutado? Para hacer la división. –

Cuestiones relacionadas