Forum: Rails-ES Crear valores select

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.
98ee355266e55690050a20fd76ee8c67?d=identicon&s=25 Jose Antonio Parra (pikislabis)
on 2008-10-15 10:08
 Hola lista,

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

<select name="alert[frequency]">
  <option></option>
  <option value="0" selected="selected">Ninguna</option>
  <option value="1">Diaria</option>
  <option value="2">Semanal</option>
  <option value="3">Mensual</option>
</select>

 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.
Adce10d7f1dbabcdab8f525a59cec32f?d=identicon&s=25 Andrés Gutiérrez (andresgutgon)
on 2008-10-15 10:23
(Received via mailing list)
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/Help...

El 15 de octubre de 2008 10:08, Jose Antonio Parra <
ruby-forum-incoming@andreas-s.net> escribió:
98ee355266e55690050a20fd76ee8c67?d=identicon&s=25 Jose Antonio Parra (pikislabis)
on 2008-10-15 10:39
 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/Help...
>
> El 15 de octubre de 2008 10:08, Jose Antonio Parra <
> ruby-forum-incoming@andreas-s.net> escribió:
Adce10d7f1dbabcdab8f525a59cec32f?d=identicon&s=25 Andrés Gutiérrez (andresgutgon)
on 2008-10-15 11:03
(Received via mailing list)
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.
98ee355266e55690050a20fd76ee8c67?d=identicon&s=25 Jose Antonio Parra (pikislabis)
on 2008-10-15 11:23
 ¿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"]])
   <option value="$">Dollar</option>\n<option
value="DKK">Kroner</option>

  options_for_select([ "VISA", "MasterCard" ], "MasterCard")
    <option>VISA</option>\n
    <option selected="selected">MasterCard</option>

  options_for_select({ "Basic" => "$20", "Plus" => "$40" }, "$40")
    <option value="$20">Basic</option>\n
    <option value="$40" selected="selected">Plus</option>

  options_for_select([ "VISA", "MasterCard", "Discover" ], ["VISA",
"Discover"])
    <option
       selected="selected">VISA</option>\n<option>MasterCard
    </option>\n
    <option
       selected="selected">Discover
    </option>

  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.
49b6123803e4f327144e991daab62f77?d=identicon&s=25 Daniel Rodriguez Troitiño (Guest)
on 2008-10-15 11:36
(Received via mailing list)
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.
Adce10d7f1dbabcdab8f525a59cec32f?d=identicon&s=25 Andrés Gutiérrez (andresgutgon)
on 2008-10-15 11:41
(Received via mailing list)
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 Rodriguez Troitiño <
notzcoolx@yahoo.es> escribió:
98ee355266e55690050a20fd76ee8c67?d=identicon&s=25 Jose Antonio Parra (pikislabis)
on 2008-10-15 11:52
 ¡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 Rodriguez Troitiño <
> notzcoolx@yahoo.es> escribió:
This topic is locked and can not be replied to.