2010-12-22 14 views
9

Encontré esto question en SO, pero realmente no me ayudó.Al pasar una matriz a través de hidden_field_tag ​​en Rails

Por lo tanto, me gustaría pasar una matriz a través de una etiqueta de campo oculto. A partir de ahora mi código es:

<%= hidden_field_tag "article_ids", @articles.map(&:id) %> 

Esto, obviamente, no funciona ya que pasa los identificadores como una cadena.

¿Cómo lo hago?

Respuesta

27

Hola que tal vez hay una mejor solución, pero se puede tratar

<% @articles.map(&:id).each do |id| %> 
    <%= hidden_field_tag "article_ids[]", id %> 
<% end %> 
1

Se podría tratar de analizarlo desde y hacia JSON:

articles_list = @articles.map(&:id).to_json # gives u: [1,2,3,4,5] 
              # note that the result is a string instead of an array 
article_ids = JSON.parse(articles_list) 

O usted podría hacer uso de la coma cadena separada:

articles_list = @articles.map(&:id).join(",") # gives u: 1,2,3,4,5 
               # note that this result is a string also 
article_ids = articles_list.split(/,/).map(&:to_i) 
0

En Los Carriles 4 que puede hacer:

<% @articles.map(&:id).each do |id| %> 
    <%= hidden_field_tag "article_ids", value: id, multiple: true %> 
<% end %> 

As Rails agregará automáticamente "[]" al nombre del campo (cuando se usa multiple) y el controlador que reciba el formulario lo verá como una matriz de valores.

+0

hm, esto no funciona para mí en absoluto, el resultado será un parámetro ' "article_ids"=>" {: valor => 123, : multiple => true} "' – Ninigi

+0

@Ninigi Perdí el código para probar el resultado, ¿puedes probar '<% = hidden_field" article_ids ", id, multiple: true%>' y ver si funciona luego voy a actualizar ¿la respuesta? (El uso de 'hidden_field' helper y sin' value: ') –

+0

tampoco funciona, simplemente ignora la opción múltiple. Eché un vistazo al código para el ayudante hidden_field. Al final, usa el método genérico 'tag' y no encontré nada sobre multiple. Tal vez esto está en desuso? – Ninigi

1

A continuación trabajó para mí en los carriles 4.1.10

<% @your_array.map().each do |array_element| %> 
    <%= hidden_field_tag "your_array[]", array_element %> 
<% end %> 
Cuestiones relacionadas