Ruby Forum Rails-ES > select con priority

Posted by Mario Soto (masoto)
on 08.08.2008 09:59
Hola a todos,
no se si esto puede ser una chorrada, pero no lo he encontrado en la
documentación. Resulta que tengo un select con 5 campos y quiero de uno
de esos campos sea el prioritario, igual a lo que se hace con el
time_zone_select con el priority_zones ó con el country_select  usando
priority_countries=['Spain'].
¿existe está opción para un select standard?

Muchas gracias
Posted by Mario Soto (masoto)
on 10.08.2008 16:58
Hola a todos,
¿es muy grande la chorrada que he soltado que nadie me ha contestado? =)
Lo siento, pero no lo encontré en la documentación.
Posted by Manuel González Noriega (Guest)
on 10.08.2008 17:02
(Received via mailing list)
2008/8/10 Mario Soto <ruby-forum-incoming@andreas-s.net>:
> Hola a todos,
> ¿es muy grande la chorrada que he soltado que nadie me ha contestado? =)
> Lo siento, pero no lo encontré en la documentación.


No especificas qué helper estás usando, pero por ejemplo, la 
opciónque necesitas está claramente especificada en la documentación de

http://api.rubyonrails.org/classes/ActionView/Helpers/FormOptionsHelper.html#M001752


--
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.
Posted by Mario Soto (masoto)
on 10.08.2008 17:14
La idea es muy sencilla,
tengo en el modelo un array con idiomas:

  LANGUAGES = [
    [ "English"), "en" ],
    [ "Spanish"), "es" ],
    [ "French", "fr"]
  ]

La idea es que si el usuario es de España, le salga como campo 
prioritario Spanish al desplegar el select:

Spanish
--------
English
French

La lógica de comprobar si un usuario es de España ya lo haría jo, pero 
necesito saber como priorizar un campo del select respecto al resto para 
que salga arriba de todos.

Muchas gracias por todo.
Posted by javier ramirez (Guest)
on 10.08.2008 17:38
(Received via mailing list)
>   LANGUAGES = [
>     [ "English"), "en" ],
>     [ "Spanish"), "es" ],
>     [ "French", "fr"]
>   ]
>
> La idea es que si el usuario es de España, le salga como campo 
> prioritario Spanish al desplegar el select:
>
>   
tan fácil como ordenar el array. Seguro que hay varias soluciones. Una
posible y que queda más o menos clara sería

LANGUAGES.sort do |x,y|
if x[0]=='Spanish'
-1
elsif y[0]=='Spanish'
 1
 else
 x <=> y
 end
end

saludos,

--
javier ramírez

..i do ruby on rails development in madrid, spain, at 
http://www.aspgems.com
..you can find out more about me on http://formatinternet.wordpress.com
and http://workingwithrails.com/person/5987-javier-ramirez
Posted by Manuel González Noriega (Guest)
on 10.08.2008 18:04
(Received via mailing list)
2008/8/10 javier ramirez <jramirez@aspgems.com>:
>
>>
>> La idea es que si el usuario es de España, le salga como campo
>> prioritario Spanish al desplegar el select:
>>
>>
> tan fácil como ordenar el array. Seguro que hay varias soluciones. Una
> posible y que queda más o menos clara sería

Mmmm, entonces no he entendido la cuestión, porque yo entendí, y
referí a Mario a, la opción 'selected' del option, que es la que se
usa en HTML para este fin.

--
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.
Posted by Xavier Noria (fxn)
on 10.08.2008 18:19
(Received via mailing list)
2008/8/10 Mario Soto <ruby-forum-incoming@andreas-s.net>:

> prioritario Spanish al desplegar el select:
>
> Spanish
> --------
> English
> French
>
> La lógica de comprobar si un usuario es de España ya lo haría jo, pero
> necesito saber como priorizar un campo del select respecto al resto para
> que salga arriba de todos.

Hay una opcion :selected.

Como la tabla de paises no cambia y es pequeña yo monto esto:

  def country_choices
    @@country_choices ||= Country.ordered.map {|c| [h(c.name), c.id]}
  end

  def country_selector(method = :country_id, options = {}, html_options 
= {})
    options[:selected] = Country.spain.id unless @object && 
@object.send(method)
    select method, country_choices, options, html_options
  end

Country.spain es un metodo de conveniencia de Country:

  # Returns and caches the Country instance that represents Spain.
  def self.spain
    @@spain ||= find_by_name_normalized('espana')
  end
Posted by javier ramirez (Guest)
on 10.08.2008 19:41
(Received via mailing list)
>> tan fácil como ordenar el array. Seguro que hay varias soluciones. Una
>> posible y que queda más o menos clara sería
>>     
>
> Mmmm, entonces no he entendido la cuestión, porque yo entendí, y
> referí a Mario a, la opción 'selected' del option, que es la que se
> usa en HTML para este fin.
>   

lo mismo no lo entendí yo :)

creía que quería que apareciese arriba del todo. He visto que en algunas
selects lo que se hace de hecho es sacar los países más frecuentes
arriba del todo de la lista, y luego el resto de sitios del mundo. Lo
mismo con el selected le sobra

saludos



--
javier ramírez

..i do ruby on rails development in madrid, spain, at 
http://www.aspgems.com
..you can find out more about me on http://formatinternet.wordpress.com
and http://workingwithrails.com/person/5987-javier-ramirez
Posted by Mario Soto (masoto)
on 11.08.2008 00:09
Muchas gracias a todos,
al final lo he solucionado con un select:

<%= f.select :lang, User:: LANGUAGES, :selected => (@user.lang || 
preferred_user_lang) %>

Donde  preferred_user_lang es un helper donde tengo la lógica para ver 
el cual sería el idioma preferido del usuario.

Gracias lista!