2010-06-09 2 views
5

Я пытаюсь использовать библиотеку rubi google_search (код следует), но он жалуется, что 'cattr_accessor - неопределенный метод' - любые идеи, почему это может быть и как я могу это исправить?cattr_accessor за пределами рельсов

require 'rubygems' 
require 'google_search' 

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

предупреждает авторов «google_search», что у них есть эта проблема. Они не должны зависеть от 'cattr_accessor' от Rails IMO. – horseyguy

ответ

10

cattr_accessor, кажется, расширение Rails 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

Rails 4+ использует аналогичный метод mattr_accessor, так как cattr_accessor устарел в рельсах 4 –

3

Вы можете получить эту функциональность, в том числе драгоценного камня Рубин Грани. Ссылка на источник здесь:

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

Вы вообще не должны требовать весь код из драгоценного камня. Вы можете выборочно потребовать то, что хотите. Тем не менее, есть немало полезных расширений.

+1

Это привело меня к проекту фасет rubyworks, который перемещался с этого сообщения https://github.com/rubyworks/facets +1, хотя из-за того, что конечный исходный код хорошо – earlonrails

Смежные вопросы