2010-06-09 12 views
5

मैं google_search रूबी लाइब्रेरी (कोड निम्नानुसार) का उपयोग करने की कोशिश कर रहा हूं लेकिन यह शिकायत करता है कि 'cattr_accessor एक अपरिभाषित विधि है' - कोई विचार यह क्यों हो सकता है या मैं इसे कैसे ठीक कर सकता हूं?रेल के बाहर cattr_accessor

require 'rubygems' 
require 'google_search' 

GoogleSearch.web :q => "pink floyd" 
+2

'google_search' मणि के लेखकों को सतर्क करें कि उन्हें यह समस्या मिली है। उन्हें रेल आईएमओ से 'cattr_accessor' पर निर्भर नहीं होना चाहिए। – horseyguy

उत्तर

10

cattr_accessor एक रेल विस्तार that acts like attr_accessor, but is accessible on both the class and its instances हो रहा है।

आप cattr_accessor विधि के स्रोत को कॉपी, बाहर की जाँच this documentation चाहते हैं:

# File vendor/rails/activesupport/lib/active_support/core_ext/class/attribute_accessors.rb, line 46 
def cattr_accessor(*syms) 
    cattr_reader(*syms) 
    cattr_writer(*syms) 
end 

# File vendor/rails/activesupport/lib/active_support/core_ext/class/attribute_accessors.rb, line 4 
def cattr_reader(*syms) 
    syms.flatten.each do |sym| 
    next if sym.is_a?(Hash) 
    class_eval("unless defined? @@\#{sym}\[email protected]@\#{sym} = nil\nend\n\ndef self.\#{sym}\[email protected]@\#{sym}\nend\n\ndef \#{sym}\[email protected]@\#{sym}\nend\n", __FILE__, __LINE__) 
    end 
end 

# File vendor/rails/activesupport/lib/active_support/core_ext/class/attribute_accessors.rb, line 24 
def cattr_writer(*syms) 
    options = syms.extract_options! 
    syms.flatten.each do |sym| 
    class_eval("unless defined? @@\#{sym}\[email protected]@\#{sym} = nil\nend\n\ndef self.\#{sym}=(obj)\[email protected]@\#{sym} = obj\nend\n\n\#{\"\ndef \#{sym}=(obj)\[email protected]@\#{sym} = obj\nend\n\" unless options[:instance_writer] == false }\n", __FILE__, __LINE__) 
    end 
end 
+0

रेल 4+ समान विधि mattr_accessor का उपयोग करते हैं, क्योंकि cattr_accessor को रेल में हटा दिया जाता है 4 –

3

आप रूबी पहलुओं मणि को शामिल करके इस कार्यक्षमता प्राप्त कर सकते हैं। यहाँ स्रोत का उल्लेख:

https://github.com/rubyworks/facets/blob/master/lib/core/facets/cattr.rb

आप आम तौर पर मणि से सभी कोड की आवश्यकता की जरूरत नहीं है। आप जो चाहते हैं उसे चुनिंदा रूप से आवश्यक कर सकते हैं। यद्यपि मणि में कुछ उपयोगी एक्सटेंशन हैं।

+1

यह मुझे रूबीवर्क्स पहलुओं प्रोजेक्ट में ले जाता है जो इस पोस्ट के बाद से स्थानांतरित होता है https://github.com/rubyworks/facets +1 हालांकि अंतिम स्रोत कोड है अच्छा – earlonrails

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