Crear valores select


#1

Hola lista,

Estoy intentando crear los elementos de un select, pero con codigo de
rails. En html sería tal que así:

Ninguna Diaria Semanal Mensual

La cosa es que he intentado crear un hash de esta forma:

@frequency = Array.new
@frequency = [[:name => “Ninguna”, :id => 0][:name => “Diaria”, :id =>
1]
[:name => “Semanal”, :id => 2][:name => “Mensual”, :id =>
3]]

Para que en la vista poder utilizar este codigo:

<%= f.select :frequency, @frequency.collect{|freq| [freq.name,
freq.id]},
:prompt => “Seleccione un usuario”,
:selected => nil
%>

Pero me da un error, mas concretamente:

“Can´t convert Hash into Integer”.

¿Se me está pasando algo? ¿O creeis que sería mejor hacerlo de otra
forma?

Muchas gracias.


#2

Sin comprender mucho tu problema, basicamente porque no tengo mucho
nivel,
te aconsejaria que te mirases la documentacion de rails sobre este tema.
Y
si despues de leerla no lo entiendes, vuelve y pregunta lo que no
entiendes.
creo que esto esta relacionado [1]

[1]
http://api.rubyonrails.com/classes/ActionView/Helpers/FormOptionsHelper.html

El 15 de octubre de 2008 10:08, Jose Antonio P. <
removed_email_address@domain.invalid> escribió:


#3

Ese documento me lo he mirado varias veces por desgracia… jejejeje.
La verdad es que no se si me expliqué bien, pero lo que quiero es una
lista de valores para el select partiendo de cero, sin utilizar ningún
modelo.

Otra de las cosas que he utilizado es:

<% f.select “alert”, “frequency”, options_for_select([[‘Ninguno’ , 0],
[‘Diario’, 1],[‘Semanal’, 2]]) %>

Y el error que me da es:

undefined method `merge’ for #String:0x68dc204

Andrés Gutiérrez wrote:

Sin comprender mucho tu problema, basicamente porque no tengo mucho
nivel,
te aconsejaria que te mirases la documentacion de rails sobre este tema.
Y
si despues de leerla no lo entiendes, vuelve y pregunta lo que no
entiendes.
creo que esto esta relacionado [1]

[1]
http://api.rubyonrails.com/classes/ActionView/Helpers/FormOptionsHelper.html

El 15 de octubre de 2008 10:08, Jose Antonio P. <
removed_email_address@domain.invalid> escribió:


#4

132: def collection_select(object, method, collection,
value_method, text_method, options = {}, html_options = {})
133: InstanceTag.new(object, method, self, nil,
options.delete(:object)).to_collection_select_tag(collection,
value_method, text_method, options, html_options)
134: end

Estos son los parametros que se le pasan a collection_select para que
lo produzca. lo que se le pasa en un Array? o un Hash?? no sé creo que
deberías de crear correctamente el objeto. Aunque sea estatico, lo
tienes que definir como lo hace rails y asi le puedes pasar los mismos
parametros que le pasas cuando lo sacas del modelo.


#5

¿Y cómo se supone que crea el objeto Rails? En la API se pueden ver
estos ejemplos del options_for_select:

options_for_select([[“Dollar”, “$”], [“Kroner”, “DKK”]])

Dollar\nKroner

options_for_select([ “VISA”, “MasterCard” ], “MasterCard”)
VISA\n
MasterCard

options_for_select({ “Basic” => “$20”, “Plus” => “$40” }, “$40”)
Basic\n
Plus

options_for_select([ “VISA”, “MasterCard”, “Discover” ], [“VISA”,
“Discover”])
VISA\nMasterCard
\n
Discover

Y en la descripción:

“Accepts a container (hash, array, enumerable, your type) and returns
a string of option tags.”

Andrés Gutiérrez wrote:

132: def collection_select(object, method, collection,
value_method, text_method, options = {}, html_options = {})
133: InstanceTag.new(object, method, self, nil,
options.delete(:object)).to_collection_select_tag(collection,
value_method, text_method, options, html_options)
134: end

Estos son los parametros que se le pasan a collection_select para que
lo produzca. lo que se le pasa en un Array? o un Hash?? no sé creo que
deberías de crear correctamente el objeto. Aunque sea estatico, lo
tienes que definir como lo hace rails y asi le puedes pasar los mismos
parametros que le pasas cuando lo sacas del modelo.


#6

¡Pues mira que era bien facil! Creía haberlo hecho así una de las
veces. ¡Muchas gracias por vuestra ayuda!

Andrés Gutiérrez wrote:

Hazle caso a daniel que sabe de lo que habla y como ves es muy facil. lo
dificil es hacerse el esquema mental de como piensa rails y pensar
igual.
Como ves yo veo por donde van los tiros pero no tengo aun ese esquema
mental
tan necesario para desarrollar de forma comoda en este framework.

Espero que lo que te ha dicho daniel te sirva, sino comentalo que aqui
te
ayudaran

Un saludo

El 15 de octubre de 2008 11:35, Daniel R. Troitiño <
removed_email_address@domain.invalid> escribió:


#7

Para tú primer ejemplo:

Crea un array como el siguiente en el controlador (por ejemplo):

@frequencies = [[‘Ninguna’, 0], [‘Diaria’, 1], [‘Semanal’, 2],
[‘Mensual’, 3]]

Como ves es un array de arrays. Cada uno de los arrays internos tiene
dos elementos. El primero es el texto que se verá y el segundo el
valor que se enviará de vuelta a tu aplicación.

En la vista simplemente utiliza el array para el select:

<%= f.select :frequency, @frequencies,
:prompt => “Seleccione un usuario”,
:selected => nil
%>

Una cosa adicional: al poner :selected => nil estás forzando que no se
seleccione ninguna opción. Quizá en un formulario de crear sea lo que
desees, pero en un formulario de editar lo ideal sería que estuviese
seleccionado el elemento adecuado. Si quitas ese :selected => nil
Rails mostrará el elemento adecuado cuando edites y el prompt cuando
crees.

Suerte.


#8

Hazle caso a daniel que sabe de lo que habla y como ves es muy facil. lo
dificil es hacerse el esquema mental de como piensa rails y pensar
igual.
Como ves yo veo por donde van los tiros pero no tengo aun ese esquema
mental
tan necesario para desarrollar de forma comoda en este framework.

Espero que lo que te ha dicho daniel te sirva, sino comentalo que aqui
te
ayudaran

Un saludo

El 15 de octubre de 2008 11:35, Daniel R. Troitiño <
removed_email_address@domain.invalid> escribió: