在轨道之外的cattr_accessor

我正在尝试使用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 

您可以通过包含Ruby Facets gem来获得此function。 在这里参考来源:

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

您通常不需要从gem中获取所有代码。 您可以有选择地要求您想要的东西。 虽然gem中有很多有用的扩展。