2010-08-16 55 views
6

我在我的模型选择列表中列出一个人与雇主的名字命名:在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 

是否有可能迫使选择列表输出按字母顺序排列?

我假设我会把订单标签放在那里...某处?

(:order => 'personname DESC') 

感谢,

丹尼

回答

10

你可以像下面这样做

# 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

嗨J.,它应该是在人们控制器或加濑控制器?另外,你的代码的控制器部分是否在def create块内?谢谢。 – dannymcc 2010-08-16 19:37:28

+0

如果视图对应于Kase的控制器操作,则应该在Kase的控制器上执行同样的操作。 – 2010-08-16 19:47:45

8

答:

#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

即使容易...

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

注:不需要自定义的方法或补充。如果我使用上述的加濑视图控制器

相关问题