题
我试图使用 GOOGLE_SEARCH Ruby库(代码如下所示),但它抱怨道:“cattr_accessor
是一个未定义的方法” - ?任何想法,为什么这可能是或我怎么能解决这个问题。
require 'rubygems'
require 'google_search'
GoogleSearch.web :q => "pink floyd"
解决方案
cattr_accessor
似乎是一个Rails扩展,其作用类似于attr_accessor
,但是在类和它的实例都可以访问。
如果要复制的方法cattr_accessor
的源,检查出本文档一个>:
# 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}\n@@\#{sym} = nil\nend\n\ndef self.\#{sym}\n@@\#{sym}\nend\n\ndef \#{sym}\n@@\#{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}\n@@\#{sym} = nil\nend\n\ndef self.\#{sym}=(obj)\n@@\#{sym} = obj\nend\n\n\#{\"\ndef \#{sym}=(obj)\n@@\#{sym} = obj\nend\n\" unless options[:instance_writer] == false }\n", __FILE__, __LINE__)
end
end
其他提示
您可以通过包括红宝石刻面宝石获得此功能。这里引用源:
https://github.com/rubyworks/刻面/斑点/主/ LIB /核心/刻面/ cattr.rb
您一般不需要要求从宝石的所有代码。您可以选择要求你想要什么。有创业板虽然有不少有用的扩展。
不隶属于 StackOverflow