5

मेरे पास रेल 3 एप में एक विवरण पृष्ठ है जिसमें कई उदाहरण चर हैं। उदाहरण के लिए, मेरे विचार निम्नलिखित उदाहरण हैं:रेल में उदाहरण चर (नियंत्रक से देखने के लिए डेटा को पास करने के लिए) को मजबूत करने के सर्वोत्तम तरीके क्या हैं?

@product 
@program 
@action 
...etc... 

उनमें से कुछ एक तार कर रहे हैं, कुछ सरणियों (बाहरी एपीआई से अनुरोध का परिणाम) कर रहे हैं। कुल मिलाकर, डेटा कम से कम 3 मॉडल से आता है।

मेरा प्रश्न है: आवृत्ति चर को मजबूत करने का सबसे अच्छा तरीका क्या है, इसलिए मेरा दृश्य और मेरा नियंत्रक क्लीनर (पठनीयता को बलि किए बिना) दिखता है? मैं समझता हूं कि प्रश्न खुला है और हर किसी की अपनी प्राथमिकताएं हैं, लेकिन कुछ विकल्प क्या हैं? मैं एक वस्तु में उदाहरण चर के संयोजन की तर्ज पर सोच रहा हूँ तो पिछले कोड कुछ इस तरह हो जाता है:

Details.product 
Details.program 
Details.action 

धन्यवाद एक बहुत!

अद्यतन: ऑब्जेक्ट रूट पर जाकर, क्या वास्तव में इसे लागू करने के लिए कोई अच्छा उदाहरण (github, ब्लॉग पोस्ट) है?

+1

उपयोग एक हैश या किसी वस्तु में सब कुछ बताते हैं या परेशान नहीं है। आपको केवल ऑब्जेक्ट गेटर्स या हैश कुंजी लुकअप होना होगा क्योंकि आप आवृत्ति चर करेंगे। –

+0

आप निश्चित रूप से सही हैं, यह कई ऑब्जेक्ट गेटर्स होगा जो मैं करता हूं। मैं इसे उपयोगिता/संगठन दृष्टिकोण से देख रहा हूं। मैं हैश रूट जाने का प्रशंसक नहीं हूं, फिर ऑब्जेक्ट रूट जाने का कोई अच्छा उदाहरण है? (मैं प्रश्नों को अपडेट करूंगा) – user527662

+0

प्रस्तुतकर्ता पैटर्न आप जो खोज रहे हैं वह हो सकता है: http://blog.jayfields.com/2007/03/rails-presenter-pattern.html –

उत्तर

2

मेरी राय में आपके नियंत्रक कार्यों को साफ़ करने का सबसे अच्छा तरीका है जितना संभव हो उतना इंस्टेंस वैरिएबल असाइन करना। प्रैक्टिस में, मैं केवल एक्शन/पहले_फिल्टर में आवृत्ति चर निर्दिष्ट करने का प्रयास करता हूं जो सीधे पारित पैरामीटर से प्राप्त होते हैं। साथ ही, सामान्य रूप से मैं पहले से फ़िल्टर करने के लिए कई उदाहरण परिवर्तनीय असाइनमेंट को धक्का देने की कोशिश करता हूं क्योंकि मैं क्रियाओं को पतला रखने के लिए कर सकता हूं।

लेकिन क्रियाओं में कटौती करने का सबसे अच्छा तरीका क्रियाओं में परिवर्तनीय असाइनमेंट व्यू हेल्पर्स का उपयोग करना है। उदाहरण के लिए यदि आप वर्तमान में किसी एक्शन में एक आवृत्ति चर निर्दिष्ट कर रहे हैं जिसका उपयोग आप कुछ div को आउटपुट करने के लिए करते हैं, तो दृश्य को ऑब्जेक्ट को पास करने की आवश्यकता के बिना सीधे आउटपुट करने के लिए व्यू हेल्पर का उपयोग करें।

before_filter :assign_variables, :only => :show 

def show; end 

private 
def assign_variables 
    @product = Product.find(params[:product_id]) 
    @program = Program.find(params[:program_id]) 
    @action = Action.find(params[:action_id]) 
end 
+0

मुझे नहीं लगता कि मैं पूरी तरह से क्या प्राप्त करता हूं आप कह रहे हैं: मॉडल स्तर पर, आप फ़िल्टर के पहले सेट किए गए पैरामीटर के आधार पर कुछ इंस्टेंस चर बनाने के लिए सेट करते हैं (यह निश्चित रूप से आपके लिए नहीं है लेकिन यह मेरी सबसे अच्छी व्याख्या है)। मैं कुछ मामलों में देखने में मददगार, महान विकल्प से सहमत हूं। किसी भी मौके से आपके गितब पर दृष्टिकोण के किसी भी उदाहरण? – user527662

+0

मैंने नियंत्रक – weexpectedTHIS

+0

धन्यवाद के लिए एक उदाहरण जोड़ा, यह स्पष्ट करता है। यह निश्चित रूप से काम करता है अगर मैं आवृत्ति चर का उपयोग करना जारी रखना चाहता हूं लेकिन इसे देखने के लिए क्लीनर बनाना चाहता हूं। – user527662

2

मैं सभी को एक उदाहरण चर का उपयोग नहीं करने का सुझाव है और इसके बजाय सभ्य जोखिम मणि के साथ जाना होगा:

यहाँ एक नियंत्रक पर एक before_filter का एक उदाहरण है।

https://github.com/voxdolo/decent_exposure

http://railscasts.com/episodes/259-decent-exposure

+0

पूरी तरह से यह पता नहीं था कि यह अस्तित्व में था, मैं निश्चित रूप से सप्ताहांत में इसे देखता हूं। – user527662

+0

क्या आपको सभ्य एक्सपोजर उपयोगी लगता है? – cthulhu

1

जब भी आप अपने आप को एक नियंत्रक कार्रवाई में कई उदाहरण चर के साथ मिल जाए, यह सबसे अच्छा प्रस्तोता पैटर्न का उपयोग करने के लिए।

यह वीडियो विवरण "Ruby on Rails - Presenters & Decorators"

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