2010-08-16 8 views
6

Tengo una lista de selección en mi modelo que enumera un nombre de las personas con su nombre de los empleadores:Hacer la salida de lista de selección en orden alfabético en Rails?

<li>Case Handler Name<span><%= f.select :person_id, Person.all.collect { |x| [x.name_and_company, x.id] } %></span></li> 

def name_and_company 
return "#{personname} (#{company})" 
end 

¿Es posible forzar a la lista de selección de salida en orden alfabético?

Supongo que pondré una etiqueta de pedido allí ... en alguna parte?

(:order => 'personname DESC') 

Gracias,

Danny

Respuesta

10

Puede hacerlo de esta manera

# controller 
@people = Person.order_by('personname ASC').collect {|x| [x.name_and_company, x.id] } 

# model 
named_scope :order_by, lambda { |o| {:order => o} } 

# view 
<%= f.select :person_id, @people %> 
+0

Hola J. Si estoy usando lo anterior en la vista Kase, que debe estar en el controlador de la gente o el controlador Kase? Además, ¿la sección del controlador de su código iría dentro del bloque de def create? Gracias. – dannymcc

+0

Si la vista corresponde a la acción del controlador de Kase, debería estar en esta misma acción en el controlador de Kase. –

8

Respuesta:

#users_controller.rb 
    def index 
     @people = Person.alphabetically 
    end 

    #user.rb 
    scope :alphabetically, order("name ASC") 

    #index.haml 
    = f.select :person_id, @people.all.collect { |p| [p.name, p.id] } %> 
4

Incluso más fácil ...

<%= f.select :name, options_from_collection_for_select(Person.order("name ASC"), :name, :name), :prompt => 'Select' %> 

Nota: No se requieren métodos personalizados o adiciones al controlador

Cuestiones relacionadas