Forum: Rails-ES Problema de parametros con check_box

Announcement (2017-05-07): www.ruby-forum.com is now read-only since I unfortunately do not have the time to support and maintain the forum any more. Please see rubyonrails.org/community and ruby-lang.org/en/community for other Rails- und Ruby-related community platforms.
726c4dc44271c0c6198aad7b7a43d492?d=identicon&s=25 Manuel Pernalete (Guest)
on 2008-12-28 21:02
(Received via mailing list)
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%>
  <tr>
         <td width="5%" bgcolor="#FFFFFF"></td>
    <td width="90%" class="fondoP_2"><%=art.descart%></td>
    <td width="5%" class="textoP_3"><%=check_box :articulo, :id, {},
art.id%></td>
    <td bgcolor="#FFFFFF"></td>
  </tr>
    <%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
0e34c56054c414263e933a1b8b3d0d55?d=identicon&s=25 Ruben Davila (rdavila)
on 2008-12-28 22:31
(Received via mailing list)
Hola Manuel, revisa el primer comentario aqui:
http://apidock.com/rails/ActionView/Helpers/FormTa...

Saludos.
49b6123803e4f327144e991daab62f77?d=identicon&s=25 Daniel Rodriguez Troitiño (Guest)
on 2008-12-29 00:01
(Received via mailing list)
2008/12/28 Manuel Pernalete <mpernaletetorres@gmail.com>:
> 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 <input
type="checkbox"> tienen el mismo nombre (seguramente "articulo[id]").
La especificación HTML indica que si hay varios <input> 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...,
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_m...,
parte de Advanced Rails Recipes, que más o menos es attribute_fu "a
mano".

Suerte.
49b6123803e4f327144e991daab62f77?d=identicon&s=25 Daniel Rodriguez Troitiño (Guest)
on 2008-12-29 00:11
(Received via mailing list)
On Sun, Dec 28, 2008 at 22:31, Ruben. D. <ruben.grunge84@gmail.com>
wrote:
> Hola Manuel, revisa el primer comentario aqui:
> http://apidock.com/rails/ActionView/Helpers/FormTa...
>

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 <input
type="hidden"> con valor vacio y el mismo id que los check box. Mi
plugin
(<http://ruido-blanco.net/blog/rails-plugin-multiple...)
se encarga de ello automáticamente.

Suerte.
This topic is locked and can not be replied to.