2011-10-28 11 views
6

समस्या: जब संभव हो तो एकाधिक ऑब्जेक्ट्स या एकाधिक क्वेरी बनाने से बचें।रेल प्रस्तुतियों का उपयोग करना - ज्ञापन योग्य 3.1 में बहिष्कृत हो रहा है - उपयोग करें || = इसके बजाय?

मैं प्रेजेंटर्स का उपयोग बेल्स प्रैक्टिस के रूप में रेल के साथ कर रहा हूं।

मैं सलाह का पालन कर रहा हूं जो कहता है कि कुछ मुद्दों के कारण @the_record = record ||= @record शैली के साथ आइटम सेट अप करने पर "सक्रिय समर्थन समर्थन" मेमोइज़ेबल "(और उसके बाद उन्हें याद करने के लिए विधि) का उपयोग करना अच्छा होगा - झूठी या शून्य संग्रहित नहीं हो रही है इसलिए क्वेरी को फिर से बुलाया जाता है और यह भी यादगार कैश का बेहतर उपयोग करता है (यानी इसका उपयोग करता है!)।

हालांकि मुझे लगता है कि memoizable में पदावनत किया जा रहा है रेल 3.1 नोट्स मैं carrierwave के तहत और बयान के साथ GitHub: "अस्वीकार्यता चेतावनी: ActiveSupport :: Memoizable रहेगी तथा इसे भविष्य के रिलीज में निकाल दिया जाएगा, बस के बजाय रूबी Memoization पैटर्न का उपयोग । (से कहा जाता /Users/kain/.rvm/gems/ruby-1.9.3-preview1/bundler/gems/carrierwave-c4459179b0f8/lib/carrierwave/mount.rb:284 पर विस्तार "।

शायद यह हो गया है हालांकि संकल्प लिया? किसी को भी पता है?

सबसे अच्छा अभ्यास आगे जाने का उपयोग करने के बारे में कोई सुझाव? प्रयोग करें || = वाक्यविन्यास? क्या उपरोक्त मुद्दों के बारे में?

enter image description here

उत्तर

7

||= विधि चीजें हैं जो मानों के रूप में सच का मूल्यांकन लौटने के लिए अच्छा है, लेकिन यह बहुत अच्छी तरह से चीजें हैं जो नहीं है के लिए काम नहीं करता। memoize इन परिस्थितियों को फँसकर और तदनुसार लौटकर इस पर काम करता है। आप इस तरह एक दृष्टिकोण ले सकता है अगर आप nil समायोजित करने के लिए करना चाहते हैं:

def some_method 
    return @some_method if (instance_variable_defined?(:"@some_method")) 

    @some_method = begin 
    ... 
    end 
end 

यह सिर्फ अगर चर परिभाषित किया गया है की जाँच करता है, यह सेट है, तो नहीं, जो अपने मामले में एक महत्वपूर्ण अंतर है।

मुझे यकीन नहीं है कि आपको क्यों लगता है कि इसे बहिष्कृत किया जा रहा है [माइकल से नोट, यह 3.2 में बहिष्कृत है, नीचे नोट देखें]। documentation इंगित करता है कि यह अभी भी 3.1 में चालू है। कभी-कभी कार्यान्वयन को "बहिष्कृत" के रूप में चिह्नित किया जाता है जब उन्हें एक मॉड्यूल से दूसरे मॉड्यूल में स्थानांतरित किया जा रहा है, लेकिन सुविधा उपलब्ध है।

+0

वैसे मैंने देखा और शायद एक पुराना कार्यान्वयन बहिष्कृत किया गया था। वैसे भी मैं यादगार के साथ जाऊंगा अब मुझे पता है कि मैं 3.1 Thx tadman पर भरोसा कर सकता हूं! –

+1

रुको मुझे चेतावनी मिली, यह प्रस्तुतियों और यादों के बारे में उत्कृष्ट रेलवे पाठ्यक्रम पर है। वे 'लाश के लिए रेल' पाठ्यक्रम के रूप में जाने जाते हैं। वैसे भी वे Memoization पर जानकारी दे दी है, ने कहा कि कैसे ActiveSupport विकल्प सबसे अच्छा था और अभी तक अपने वास्तविक कोड चुनौती कहते हैं कि "ActiveSupport :: Memoizable (ध्यान दें: ActiveSupport :: Memoizable रेल 3.1 में हटाई गई है)"! ताकि के बारे में और अगर यह पदावनत हो जाता है अभी भी यकीन नहीं है कि इसकी वजह से ऊपर मुद्दों का समाधान किया जाएगा, आदि .. –

+3

3.2 के रूप में पदावनत: http://guides.rubyonrails.org/3_2_release_notes.html#activesupport_deprecations – m33lky

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