Check_box helper y habtm

Buenas,

Pues después de arrancar el servidor, vienen las dudas, claro estaba : )

Creo que la estructura de clases la tengo bien. Dos objetos, cada uno
con su id, y una tabla que relaciona los ids.

Por ejemplo globos y colores. Los globos pueden ser de varios colores
y cada color puede estar asociado a varios globos. En los modelos de
ambos tengo el has_and_belong_to_many.

El problema viene a la hora de dar de alta nuevos globos. Lo primero
que no sé si la sintaxis que estoy haciendo de check_box es la
correcta (en libro de rails no vienen más de 5 líneas de ejemplo ¬¬).
Lo segundo que genera campos ocultos (aunque por lo que he buscado y
leído, vienen bien). Y lo último que, aunque grabar bien los datos del
globo nuevo, no actualiza la tabla que relaciona globos y colores.

El código:

nuevo.rthml

<% for color in @colores %>
<%= check_box(‘globo’, ‘colores’, {:value => color.id, :name =>
color.id},‘1’,‘0’) %><%= color.nombre %>
<% end %>

globo_controller.rb

@nuevaGlobo = Receta.new(params[:globo])
nuevaGlobo.save

He probado bastantes variaciones tanto en el controlador como en el
rhtml pero la mayoría acaban en errores de
compilación.
¿Alguien me puede orientar por dónde anda el problema?

Gracias otra vez,

Juan


Juan Delgado - Zárate
http://zarate.tv
http://dandolachapa.com

Gracias por el plugin, lo probare hoy cuando llegue a casa. De todas
formas, me sorprende un poco que no se pueda hacer “por defecto” con
Rails.

Salud

On 1/14/07, Daniel R. Troitiño [email protected] wrote:

ambos tengo el has_and_belong_to_many.
nuevo.rthml

investigando un tiempo sobre esta posibilidad y descubrí que no era
Ror-es mailing list
[email protected]
http://lists.simplelogica.net/mailman/listinfo/ror-es


Juan Delgado - Zárate
http://zarate.tv
http://dandolachapa.com

On 1/14/07, Zárate [email protected] wrote:


He probado bastantes variaciones tanto en el controlador como en el
rhtml pero la mayoría acaban en errores de compilación.

¿Alguien me puede orientar por dónde anda el problema?

Gracias otra vez,

Juan

Según me parece estás intentado mostrar todos los colores disponibles
y que el usuario elija unos cuantos en una relación habtm. Estuve
investigando un tiempo sobre esta posibilidad y descubrí que no era
sencillamente realizable, por eso desarrollé un plugin para Rails que
simplifica ese tipo de listas:
http://ruido-blanco.net/blog/rails-plugin-multiple-select-espanol/

Como verás en la página del plugin exige un poco de trabajo en el
controlador debido a restriciones de Rails y a que si el usuario no
marca ningún checkbox nunca nos enteraríamos de ello.

Espero que te ayude.

On 1/15/07, Zárate [email protected] wrote:

Gracias por el plugin, lo probare hoy cuando llegue a casa. De todas
formas, me sorprende un poco que no se pueda hacer “por defecto” con
Rails.

Salud

---------- Forwarded message ----------
From: Daniel R. Troitiño [email protected]
Date: Jan 15, 2007 1:42 PM
Subject: Re: [Ror-es] check_box helper y habtm
To: “La lista sobre Ruby On Rails (rubyonrails.com) en castellano”
[email protected]

On 1/15/07, Zárate [email protected] wrote:

Gracias por el plugin, lo probare hoy cuando llegue a casa. De todas
formas, me sorprende un poco que no se pueda hacer “por defecto” con
Rails.

Salud

Ya, es un poco raro, me explico.

Puedes hacer que los checkbox funcionen más o menos como te lo
propones si como método utilizas ‘color_ids[]’ y como checked_value de
cada checkbox el id de cada color. En ese caso la asignación que
utilizas guardaría correctamente los colores excepto en el caso de que
el usuario no seleccionara ningún color, que haría que Rails no
modificara el valor anterior.

El problema de utilizar el método color_ids es que “color_ids=” existe
para las asociaciones has_many y has_and_belongs_to_many, pero no
existe “color_ids”, que te permitiría recuperar la lista de ids de tu
coleccion de colores. Si ese segundo método los checkboxes fallan al
intentar dibujarse ejecutando un método que no existe.

A pesar de que varias personas pidieron ese método por simetría DHH
dijo que no quería exponer tanto los ids de la base de datos y cerró
la discusión en el bug tracker. Personalmente se expone el id de los
registros por todos lados (desde la URL hasta muchas partes del código
de Rails) así que me parece una explicación chorra, pero bueno.

Del plugin hay dos versiones: una que no se “mete” con Rails y otra
que sí, implementando el método “color_ids” necesario para un
funcionamiento más sencillo del plugin. Esta segunda versión la
implementé porque alguén la pidió, pero no me gusta ya que implementa
algo que no parece desearse en Rails y además será más difícil de
mantener. Puedes utilizar la que te sea más cómoda.