17

इस रेल में चिंता के बारे में एक बहुत अच्छा विचार है: http://37signals.com/svn/posts/3372-put-chubby-models-on-a-diet-with-concernsरेल ActiveSuppport: चिंता और निजी तरीके

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

क्या रेल सक्रिय ActiveSupport :: Concern मॉड्यूल के अंदर निजी विधियां बनाने का अर्थ है? यदि हां, तो चिंता परिभाषा में नियमित उदाहरण विधियों और कक्षा विधियों दोनों के लिए निजी काम करता है?

उत्तर

16

क्या रेलवे ActiveSupport::Concern मॉड्यूल के अंदर निजी विधियां बनाने के लिए यह समझ में आता है?

ध्यान में रखते हुए कि चिंताएं स्मार्ट मॉड्यूल हैं जो अंततः अन्य कक्षाओं में शामिल की जाएंगी - हाँ, यह करता है। यह सिर्फ एक पोर्टेबल कोड है, निकालने योग्य व्यवहार है और मैं इसे अपने नियंत्रक (या मॉडल इत्यादि) के हिस्से के रूप में मानना ​​चाहता हूं क्योंकि मैं इसे लिख रहा हूं। तो मूल रूप से आप सामान्य रूप से विधियों private या protected घोषित करते हैं।

हो सकता है कि 2013 के बाद से the post you linked अद्यतन किया गया है, लेकिन DHH वहाँ उदाहरण में से एक में वास्तव में करता है:

module Dropboxed 
    extend ActiveSupport::Concern 

    included do 
    before_create :generate_dropbox_key 
    end 

    def rekey_dropbox 
    generate_dropbox_key 
    save! 
    end 

    private # <- Let's list some privates 

    def generate_dropbox_key 
    self.dropbox_key = SignalId::Token.unique(24) do |key| 
     self.class.find_by_dropbox_key(key) 
    end 
    end 
end 

private कक्षा तरीकों के रूप में, मैं @Hugo से सहमत है और उन्हें अपने आप इस्तेमाल कभी नहीं किया है, लेकिन आप इसे इस तरह प्राप्त कर सकते हैं:

module Dropboxed 
    extend ActiveSupport::Concern 

    included do 
    private_class_method :method_name 
    end 

    module ClassMethods 
    def method_name 
    end 
    end 
end 
+0

यह विधि छिपी नहीं जाएगी, आपको इसके लिए अभी भी "निजी" कीवर्ड का उपयोग करने की आवश्यकता है। –

+0

ऐसा लगता है कि जब चिंता की विधि से बुलाया जाता है, तो 'self.class.method_name' निजी नहीं है क्योंकि निजी। – ybart

2

यह सिर्फ मेरी राय है लेकिन अभी मैं निजी वर्ग विधि के बारे में अपने सिर को खरोंच कर रहा हूं, वे किसके लिए अच्छे हैं? वैसे भी, यदि आपको वास्तव में उनकी आवश्यकता है तो उन्हें इस पोस्ट का संदर्भ लें: How to create a private class method?

यह चिंता मॉड्यूल में निजी उदाहरण विधियों का अर्थ है और ठीक काम करेगा। निजी वर्ग के तरीके भी ठीक काम करेंगे लेकिन उपर्युक्त पोस्ट के बाद।

+0

यह आसान है: आप छोटे टुकड़ों में आप वर्ग विधि को तोड़ने की जरूरत है, और वर्ग इंटरफ़ेस में उन टुकड़ों को बेनकाब नहीं करना चाहती। असल में वही कारण आप किसी भी अन्य मामले में निजी तरीकों का उपयोग करेंगे। – meta

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

  • कोई संबंधित समस्या नहीं^_^