2010-08-16 38 views
6

Tôi có một danh sách lựa chọn trong mô hình của tôi trong đó liệt kê một tên nhân viên có tên sử dụng lao động của họ:Hãy chọn đầu ra danh sách lựa chọn theo thứ tự bảng chữ cái trong 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 

Có thể để buộc các danh sách lựa chọn để đầu ra trong thứ tự chữ cái?

Tôi giả sử tôi sẽ đặt một thẻ đơn hàng trong đó ... ở đâu đó?

(:order => 'personname DESC') 

Cảm ơn,

Danny

Trả lời

10

Bạn có thể làm điều đó như thế này

# 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

Hi J. Nếu Tôi đang sử dụng trên trong giao diện Kase, nó phải là trong bộ điều khiển người hoặc bộ điều khiển Kase? Ngoài ra, phần bộ điều khiển của mã của bạn có nằm trong khối tạo def không? Cảm ơn. – dannymcc

+0

Nếu khung nhìn tương ứng với hành động của bộ điều khiển Kase, thì nó sẽ có cùng hành động trên bộ điều khiển của Kase. –

8

Trả lời:

#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

Thậm chí dễ dàng hơn ...

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

Lưu ý: Không yêu cầu phương pháp tùy chỉnh hoặc bổ sung để điều khiển

Các vấn đề liên quan