2010-10-25 9 views
7

मैं कुछ सामान्य कोड को मणि में निकालने की कोशिश कर रहा हूं।rails3 मणि: act_as_something

मुझे लगता है कि acts_as_something सरल पुन: उपयोग के लिए एक अच्छी रणनीति है।

क्या कोई अच्छा ट्यूटोरियल है जो रेल 3 रत्नों के लिए इस पर चर्चा करता है? मैं कई (जैसे http://guides.rubyonrails.org/plugins.html के रूप में) rails2 पर चर्चा मिल गया है, लेकिन वह

rails2 के लिए विशिष्ट है यहाँ ट्यूटोरियल के कुछ/ब्लॉग मैं पहले से ही पढ़ा है कर रहे हैं:

धन्यवाद कवर नहीं करता है

उत्तर

12

upda TE: मैं एक ब्लॉग इस उत्तर के आधार पर पद चुके हैं, लेकिन और अधिक विस्तार के साथ: http://thoughtsincomputation.com/posts/coding-an-acts_as-gem-for-rails-3

-

मैं अपने सिर के ऊपर से एक और ट्यूटोरियल स्रोत के बारे में पता नहीं कर रहा हूँ, लेकिन यहाँ हैं कुछ सामान्य सुझाव।

रेल 3 रेलवे नामक वास्तव में उपयोगी सुविधा का उपयोग करता है - http://api.rubyonrails.org/classes/Rails/Railtie.html देखें।

तो, अगर मैं एक act_as_ * मणि लागू कर रहा था, तो मैं वहां से शुरू करूंगा।

# lib/acts_as_awesome/railtie.rb 
require 'rails' 
require 'acts_as_awesome' 

module ActsAsAwesome 
    class Railtie < Rails::Railtie 
    config.to_prepare do 
     ApplicationController.send(:extend, ActsAsAwesome::Hook) 
    end 
    end 
end 

और ActsAsAwesome :: हुक कोड:: मेरी railtie की तरह कुछ लग सकता है

# lib/acts_as_awesome/hook.rb 
module ActsAsAwesome::Hook 
    def acts_as_awesome(*args) 
    options = args.extract_options! 
    # do the things that make the controller awesome. 
    include ActsAsAwesome::InstanceMethods 
    before_filter :an_awesome_filter 
    end 
end 

मैं यहाँ अवधारणाओं लग रहा है ध्वनि कर रहे हैं और इससे पहले कि इसी तरह की प्रक्रियाओं का इस्तेमाल किया है। असल में, यह रेलों को उत्पादन के दौरान एक बार toprepare ब्लॉक निष्पादित करने के लिए बताएगा और विकास में प्रत्येक अनुरोध से पहले (हम चाहते हैं कि उस समय एप्लिकेशन कंट्रोलर को फिर से लोड किया जाएगा, संभावित रूप से हमारी हुक विधि को मिटा दें); और हुक बस यही है: यह सभी नियंत्रकों (या बल्कि, सभी नियंत्रक जो अनुप्रयोग नियंत्रक का विस्तार करते हैं) को एक हुक जोड़ता है ताकि उपयोगकर्ता को उनके नियंत्रकों में असली "बहुत बढ़िया" कोड पेश करने की अनुमति मिल सके, अन्यथा उन नियंत्रकों को प्रभावित किए बिना, जिन्हें इसकी आवश्यकता नहीं है।

#acts_as_awesome हुक अपने आप में, अद्भुत कार्यक्षमता व्यक्त नहीं करता है। ऐसा इसलिए है क्योंकि सभी नियंत्रकों को इस कार्यक्षमता की आवश्यकता नहीं हो सकती है। इसके बजाय, विधि वास्तविक भयानक सामान, ActsAsAwesome :: InstanceMethods मॉड्यूल के माध्यम से प्रस्तुत करने के लिए ज़िम्मेदार है। इस तरह, उपयोगकर्ता केवल Awesome कार्यक्षमता प्राप्त करता है अगर वे स्पष्ट रूप से act_as_awesome विधि को कॉल करते हैं। यह नियंत्रक को फ़िल्टर से पहले एक फिल्टर भी जोड़ता है ताकि यह प्रदर्शित किया जा सके कि इस विधि में कोड का मूल्यांकन उसी तरह किया जाएगा जैसे कि यह लक्ष्य नियंत्रक वर्ग में ही था।

यदि आप नियंत्रकों के बजाय मॉडल को लक्षित कर रहे हैं तो यह तकनीक बिल्कुल वही काम करनी चाहिए: केवल ActiveRecord :: Base में अपना हुक इंजेक्ट करें। एआर के रूप में: बी केवल रेल बूट पर लोड होता है, आपको शायद इसे प्रारंभकर्ता में डालने में सक्षम होना चाहिए (रेलटी दस्तावेज़ों का संदर्भ लें), लेकिन मुझे यहां गलत होने का अधिकार सुरक्षित है।

रेलटे से संबंधित एक गोचा: दस्तावेज पढ़ता है जैसे कि यह स्वतः पता लगाया जाना चाहिए था, लेकिन मुझे अक्सर इसके साथ समस्याएं होती हैं।इसके आस-पास पहुंचने के लिए, बस अपने मणि की मुख्य स्रोत फ़ाइल से रेलटी की आवश्यकता होती है (उपरोक्त उदाहरण में, यह lib/act_as_awesome.rb होगा)।

तुम मेरे GitHub खाते में अपने सभी महिमा में पूरे ActsAsAwesome स्रोत देख सकते हैं: http://github.com/sinisterchipmunk/acts_as_awesome

मुझे आशा है कि यह उपयोगी है। आपका प्रश्न कुछ हद तक उच्च स्तर था इसलिए उच्च स्तर की प्रतिक्रिया सबसे अच्छी है जो मैं कर सकता हूं। इतना

-Colin मैकेंज़ी चतुर्थ

http://thoughtsincomputation.com

@sinisterchipmnk

+0

धन्यवाद। मैं आपके ट्यूटोरियल का पालन कर रहा था। यह सहायक है। – cbrulak

+0

कोई समस्या नहीं, मदद करने में खुशी हुई। मेरी सामग्री को पढ़ने (और उल्लेख करने!) पढ़ने के लिए धन्यवाद :) अगर लिंक के लिए नहीं तो मैंने कभी यह प्रश्न नहीं देखा होगा। (यह साइट के आंकड़ों में पॉप अप देखा, हे।) – sinisterchipmunk

+0

मैंने उस लेख और एक पुरानी रेल प्लगइन के आधार पर एक मणि बनाया। यदि आप चाहते हैं कि आप इसे देख सकें, क्योंकि यह एक अच्छा उदाहरण है: https://github.com/toptierlabs/acts_as_fulltextable – Tony

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