Estoy teniendo un problema a la hora de realizar un select, ya que
necesito que pueda seleccionar la opción de dejar vacÃo el campo.
En mi controlador hago lo siguiente:
@clubs_existentes = Club.find(:all)
@listado_clubs = Array.new
for club in @clubs_existentes
@listado_clubs << club.nombre
end
Y en la vista (estoy usando HAML):
=f.select :club_id, @listado_clubs
El problema es que una vez que selecciono un club para mi jugador me es
imposible dejarlo libre, ¿Cómo puedo solucionar esto?
Carlos Belizón wrote:
Estoy teniendo un problema a la hora de realizar un select, ya que
necesito que pueda seleccionar la opción de dejar vacÃo el campo.
En mi controlador hago lo siguiente:
@clubs_existentes = Club.find(:all)
@listado_clubs = Array.new
for club in @clubs_existentes
@listado_clubs << club.nombre
end
Y en la vista (estoy usando HAML):
=f.select :club_id, @listado_clubs
El problema es que una vez que selecciono un club para mi jugador me es
imposible dejarlo libre, ¿Cómo puedo solucionar esto?
Bueno, me he dado cuenta que asà no funciona, os explico que quiero
hacer:
Tengo los modelos Jugador y Club que estan relacionados con una relacion
has_many y belongs_to, de forma que un Club puede tener 0 a muchos
jugadores. Lo que estoy intentando hacer es que a la hora de crear un
jugador pueda usar un desplegable (un select) en el que seleccione el
club al que pertenece mediante su nombre y no mediante el ID del club,
¿Cómo puedo lograr esto?
Carlos Belizón wrote:
Estoy teniendo un problema a la hora de realizar un select, ya que
necesito que pueda seleccionar la opción de dejar vacÃo el campo.
En mi controlador hago lo siguiente:
@clubs_existentes = Club.find(:all)
@listado_clubs = Array.new
for club in @clubs_existentes
@listado_clubs << club.nombre
end
Y en la vista (estoy usando HAML):
=f.select :club_id, @listado_clubs
El problema es que una vez que selecciono un club para mi jugador me es
imposible dejarlo libre, ¿Cómo puedo solucionar esto?
He eliminado el código del controlador y he sustituido el de la vista
por:
=f.select :club_id, Club.find(:all).map {|club| club.nombre}
Ya que en caso de introducir valores que lanzarán un error de validación
Rails lanzaba un error extrañÃsimo, ahora por lo menos no ocurre eso,
pero sigo teniendo la duda de cómo mostrar al usuario el nombre del club
pero sin embargo almacenar en dicho campo el ID y no el nombre.
2008/6/10 Carlos Belizón [email protected]:
Ya que en caso de introducir valores que lanzarán un error de validación
Rails lanzaba un error extrañísimo, ahora por lo menos no ocurre eso,
pero sigo teniendo la duda de cómo mostrar al usuario el nombre del club
pero sin embargo almacenar en dicho campo el ID y no el nombre.
Carlos, ¿estás familiarizado con la sintáxis del elemento y
en (x)HTML? ¿O con el envio de información por formularios?
–
Manuel, que
piensa que eres una excelente persona y medra en torno a
http://simplelogica.net y/o http://simplelogica.net/logicola/
Recuerda comer mucha fruta y verdura.
2008/6/10 Carlos Belizón [email protected]:
end
Ror-es mailing list
[email protected]
http://lists.simplelogica.net/mailman/listinfo/ror-es
Lo que necesitas es collection_select:
— controlador —
@jugador = # … como quieras conseguir tu jugador
— vista —
=f.collection_select ‘jugador’, ‘club_id’, Club.find(:all), ‘id’,
‘nombre’
Suerte.
Carlos Belizón wrote:
Carlos Belizón wrote:
Estoy teniendo un problema a la hora de realizar un select, ya que
necesito que pueda seleccionar la opción de dejar vacÃo el campo.
En mi controlador hago lo siguiente:
@clubs_existentes = Club.find(:all)
@listado_clubs = Array.new
for club in @clubs_existentes
@listado_clubs << club.nombre
end
Y en la vista (estoy usando HAML):
=f.select :club_id, @listado_clubs
El problema es que una vez que selecciono un club para mi jugador me es
imposible dejarlo libre, ¿Cómo puedo solucionar esto?
He eliminado el código del controlador y he sustituido el de la vista
por:
=f.select :club_id, Club.find(:all).map {|club| club.nombre}
Ya que en caso de introducir valores que lanzarán un error de validación
Rails lanzaba un error extrañÃsimo, ahora por lo menos no ocurre eso,
pero sigo teniendo la duda de cómo mostrar al usuario el nombre del club
pero sin embargo almacenar en dicho campo el ID y no el nombre.
Bueno, siento ser tan pesado pero creo que ya lo voy consiguiendo, ahora
he modificado la lÃnea anterior por:
=f.select :club_id, Club.find(:all).collect {|club| [club.nombre,
club.id]}, {:include_blank => ‘Jugador Libre’}
Lo que pasa es que no entiendo excesivamente bien qué es lo que he
conseguido usando el método collect, si alguien fuera tan amable de
explicármelo se lo agradecerÃa
Sí, estoy familiarizado, es decir sé que para hacer lo que quiero, en la
etiqueta option, value debería de ser el club_id y el texto que ha de ir
dentro de la etiqueta sería el nombre del club.
Mejor entonces. Deberías a partir de la colección de elementos que
tienes utilizar algunos de los helpers para formularios (en la doc),
como te sugieren, o si no, utilizar los métodos de Array o Enumerable
(en la doc de ruby) para construir una colección en la forma adecuada.
En cualquier caso, construir un select es un caso muy básico de uso
que tienes descrito en la práctica totalidad de libros, tutoriales,
etc, a los que puedas echar mano.
–
Manuel, que
piensa que eres una excelente persona y medra en torno a
http://simplelogica.net y/o http://simplelogica.net/logicola/
Recuerda comer mucha fruta y verdura.
Manuel González Noriega wrote:
2008/6/10 Carlos Beliz�n [email protected]:
Ya que en caso de introducir valores que lanzar�n un error de validaci�n
Rails lanzaba un error extra��simo, ahora por lo menos no ocurre eso,
pero sigo teniendo la duda de c�mo mostrar al usuario el nombre del club
pero sin embargo almacenar en dicho campo el ID y no el nombre.
Carlos, �est�s familiarizado con la sint�xis del elemento y
en (x)HTML? �O con el envio de informaci�n por formularios?
–
Manuel, que
piensa que eres una excelente persona y medra en torno a
http://simplelogica.net y/o http://simplelogica.net/logicola/
Recuerda comer mucha fruta y verdura.
SÃ, estoy familiarizado, es decir sé que para hacer lo que quiero, en la
etiqueta option, value deberÃa de ser el club_id y el texto que ha de ir
dentro de la etiqueta serÃa el nombre del club.
Daniel R. Troitiño wrote:
2008/6/10 Carlos Belizón [email protected]:
end
Ror-es mailing list
[email protected]
http://lists.simplelogica.net/mailman/listinfo/ror-es
Lo que necesitas es collection_select:
— controlador —
@jugador = # … como quieras conseguir tu jugador
— vista —
=f.collection_select ‘jugador’, ‘club_id’, Club.find(:all), ‘id’,
‘nombre’
Suerte.
Muchas gracias, creo que esa es la forma más correcta de hacerlo, pero
sin embargo esta lÃnea:
=f.select :club_id, Club.find(:all).collect {|club| [club.nombre,
club.id]}, {:include_blank => ‘Jugador Libre’}
Funciona de la misma manera, y he intentado trasladar la parte:
Club.find(:all).collect {|club| [club.nombre, club.id]}
al controlador, y si introducÃa un valor no válido para cualquier otro
campo (no válido según las validaciones que establecà en el modelo),
rails lanzaba el siguiente error:
You have a nil object when you didn’t expect it!
You might have expected an instance of Array.
The error occurred while evaluating nil.inject
¿Alguien sabe por qué?
Y alguien es tan amable de explicarme por qué es necesario el collect
usando esta última manera (que sé que no es la más adecuada y no la
usaré finalmente pero ya me gustarÃa saberlo ;)).
Un Saludo.