Problema de parametros con check_box


#1

Hola a todos! amigos tengo un problemita con el check_box de un
formulario…

El detalle es que en la vista muestro un listado de items o articulos y
el
usuario le da a cada check_box cuyo valor es el id del articulo y cuando
le
da agregar articulos a la cesta en el controller hago un:
for a in params[:articulo][:id]

end

no me da error ni nada pero cuando voy a revisar en la base de datos
solo me
agrega el primer articulo al que le hice en check!

en la vista tengo mi check_box de la siguiente manera

<%for art in @articulos%>
<%=art.descart%> <%=check_box :articulo, :id, {}, art.id%> <%end%>

he revisado por el log y me pasa como parametro un check no me esta
pasando
los 5, 10 o los N articulos que puedo seleccionar…

alguien tiene alguna idea al respecto?

Muchas gracias


#2

Hola Manuel, revisa el primer comentario aqui:
http://apidock.com/rails/ActionView/Helpers/FormTagHelper/check_box_tag

Saludos.


#3

On Sun, Dec 28, 2008 at 22:31, Ruben. D. removed_email_address@domain.invalid
wrote:

Hola Manuel, revisa el primer comentario aqui:
http://apidock.com/rails/ActionView/Helpers/FormTagHelper/check_box_tag

Esa solución le falta el detalle de que cuando no selecciones ningún
check box tu controlador no recibirá ninguna información y dependiendo
de como trates tus datos puede no actualizar correctamente los
modelos, o incluso fallar. La solución es incluir un con valor vacio y el mismo id que los check box. Mi
plugin
(http://ruido-blanco.net/blog/rails-plugin-multiple-select-espanol)
se encarga de ello automáticamente.

Suerte.


#4

2008/12/28 Manuel P. removed_email_address@domain.invalid:

en la vista tengo mi check_box de la siguiente manera

he revisado por el log y me pasa como parametro un check no me esta pasando
los 5, 10 o los N articulos que puedo seleccionar…

Si ves el HTML que genera ese código verás que todos los tienen el mismo nombre (seguramente “articulo[id]”).
La especificación HTML indica que si hay varios con el mismo
nombre únicamente se debe transmitir el primero de ellos. Por eso solo
ves el primero de ellos en el log y en tu código.

Quizá puedas adaptar tu código para funcionar como el siguiente…

<% fields_for :articles, :index => nil do |articles| %>
<%for art in @articulos%>
<%= articles.check_box :id, {}, art.id %>
<% end %>
<% end %>

De esa forma siempre recibirás un resultado como :articles => [{ :id
=> 1 }, { :id => 2 }, …, { :id => 0 }]. El :id => 0 es por la manía
de Rails de meter un campo hidden con cada check_box para que cuando
el check box no esté seleccionado el resultado sea correcto en el
controlador. De hecho es posible que te lleguen varios de estos :id =>
0. Quizá la solución más sencilla sea utilizar directamente
check_box_tag en vez de check_box.

Dependiendo de tus necesidades puedes considerar útiles
http://ruido-blanco.net/blog/rails-plugin-multiple-select-espanol/,
un plugin que programé para una tarea similar a la que propones,
http://github.com/giraffesoft/attribute_fu, otro plugin para
realizar formularios multi-modelo (un poco más de lo que tú quieres,
pero quizá te resuelva tu problema), o
http://media.pragprog.com/titles/fr_arr/multiple_models_one_form.pdf,
parte de Advanced Rails Recipes, que más o menos es attribute_fu “a
mano”.

Suerte.