2010-08-16 13 views
6

मेरे पास मेरे मॉडल में एक चुनिंदा सूची है जो अपने नियोक्ता नाम के साथ एक व्यक्ति का नाम सूचीबद्ध करती है:रेल में वर्णमाला क्रम में चयन सूची आउटपुट बनाओ?

<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

हाय जे नियंत्रक को मैं कासे ध्यान में रखते हुए ऊपर का उपयोग कर रहा है, यह लोगों नियंत्रक या कासे नियंत्रक में किया जाना चाहिए? साथ ही, क्या आपके कोड का नियंत्रक अनुभाग डीफ बिल्ड ब्लॉक के भीतर जाएगा? धन्यवाद। – dannymcc

+0

यदि दृश्य केज़ की नियंत्रक कार्रवाई से मेल खाता है, तो यह केज़ के नियंत्रक पर इसी क्रिया में होना चाहिए। –

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' %> 

नोट: की आवश्यकता नहीं है कस्टम तरीकों या संयोजन

संबंधित मुद्दे