2009-04-15 10 views
5

मुझे पता है कि प्रस्तुतिकरण परत से कोड रखना सर्वोत्तम है। लेकिन, मैं सोच रहा हूं कि "स्वीकार्य" कितना माना जाता है। उदाहरण के लिए मैं कोड की इस पंक्ति के साथ एक एचटीएमएल चयन बॉक्स populate।रेल व्यू में कितना कोड ठीक है?

CodesecureProject.find(:all,:order => 'name').collect {|project| [project.name, project.id] } 

अभी मेरे पास फॉर्म में एम्बेड कोड की यह पंक्ति है। मैं क्या सोच रहा हूं कि क्या समुदाय सोचता है कि यह बहुत अधिक कोड है और इसे पहले नियंत्रक पर एक आवृत्ति चर में संग्रहीत किया जाना चाहिए, फिर फॉर्म में उपयोग किए गए चर।

उत्तर

5

मैं एक साइट मॉडल में निम्नलिखित स्थिर विधि का उपयोग कुछ इसी तरह प्राप्त करने के लिए:

class Site 
    def self.select_options 
    Site.find(:all, :order => 'UPPER(name)').collect {|s| [s.name, s.id]} 
    end 
def 

तब मेरे डोमेन ध्यान में रखते हुए मैं फोन:

<%= f.select :site_id, Site.select_options %> 

यह इन परिस्थितियों के लिए वास्तव में अच्छी तरह से काम करता है।

अपने उदाहरण में, आप कोशिश कर सकते हैं:

class CodesecureProject 
    def self.select_options 
    CodesecureProject.find(:all, :order => 'name').collect {|p| [p.name, p.id]} 
    end 
end 

और फिर दृश्य के माध्यम से इसे कहते के साथ:

<%= f.select :codesecure_project_id, CodesecureProject.select_options %> 
+1

यदि आपके पास ऐसी किसी चीज की सूची है जो बदलती नहीं है, जैसे कि राज्य या देश, आप कक्षा निरंतर भी कर सकते हैं और फिर यह प्रति रेल उदाहरण के बाद ही लोड हो जाता है। –

1

मेरे पास मेरी परियोजनाओं में बहुत सारे कोड हैं, सिवाय इसके कि मैं कोई भी खोज न करने का प्रयास करता हूं। आपके मामले में मैं एक नामित गुंजाइश

named_scope :order, lambda { |order| {:order => order}} 

बनाने के लिए और कोड होगा:

CodesecureProject.order(:name).collect {|project| [project.name, project.id] } 

यह थोड़ा क्लीनर है।

यदि आपको बहुत से चुनिंदा बॉक्स मिलते हैं जिन्हें नाम और आईडी (मुझे कभी-कभी यकीन है) की आवश्यकता होती है, तो आप एक सहायक नाम बनाने का प्रयास कर सकते हैं जो मॉडल नाम को छोड़ देता है और आपको आवश्यक सरणी देता है।

def magic_for_select(model) 
    model.all.collect{|instance| [instance.name, instance.id]} 
end 
+0

वास्तव में इस कोड को पढ़ने के लिए बहुत प्राकृतिक होगा अपने दायरे "ordered_by" बुला! –

5

मैं यह नहीं कहूंगा कि मैं इसे कभी नहीं करूँगा (मैं झूठ बोलूंगा) लेकिन दिए गए कोड उदाहरण से मुझे परेशान कर दिया जाएगा। मुझे लगता है कि मैं डेटा को अपने नियंत्रक से चुनिंदा बॉक्स में वितरित करने के इच्छुक हूं। एक सहायक विकल्प एक और विकल्प है यदि मुझे लगता है कि मैं एक से अधिक बार कुछ कर रहा हूं। मुझे अलग-अलग विचारों की तुलना में नियंत्रक में डुप्लिकेशंस देखने की अधिक संभावना है।

यदि मैं एकाधिक दृश्यों में एक ही HTML घटक का उपयोग कर रहा हूं, तो मैं खुद को आंशिक रूप से पहुंच सकता हूं या पूरी चीज को कस्टम सहायक में लपेट सकता हूं: project_select() या कुछ ऐसे।

जितना अधिक मैं एमवीसी दुनिया में काम करता हूं उतना ही मैं खुद को विचारों में कोड से परहेज करता हूं। मुझे एहसास है कि यदि मैं शून्य कोड स्थिति तक पहुंच जाता हूं तो किसी प्रकार की ज़ेन निपुणता हासिल की जाएगी, हालांकि दार्शनिक शर्तों के अलावा किसी भी चीज़ का मूल्य अत्यधिक बहस योग्य है।

1

मैं मारन से थोड़ा आगे जाऊंगा। आम तौर पर मैं निम्नलिखित करता हूं:

  • खोज निष्पादित करने के लिए मॉडल में नामांकित_स्कोप बनाएं।
  • नियंत्रक से नामित_स्कोप को कॉल करें और परिणामों को एक आवृत्ति चर में संग्रहीत करें।
  • केवल दृश्य में आवृत्ति चर डालें।

यदि आवश्यक हो तो मैं केवल एक सहायक का उपयोग करूंगा। बाद में अपने कोड पर वापस जाने पर, यदि आप अपने नियंत्रक को उस डेटा को सेट अप करना चाहते हैं, जिसे देखने के लिए आवश्यक है, तो हेल्पर को कॉल करने के दृश्य को देखने के बजाय (अभी तक एक और फ़ाइल देखने के लिए)।

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