尽管我需要Nokogiri
并初始化了变量,但我的方法无法访问Nokogiri方法。我想这样做:
class Requester
require 'nokogiri'
def initialize(body)
@body = body
end
def destination
@body.at_css('destination')
end
end
然后我传递body
,这是一个Nokogiri
文件。
mess = Requester.new(body)
当我这样做时,我得到一个"无方法错误":
mess.destination
我不明白。我以为如果我require
的话,我的班级会有所有的Nokogiri方法。
完整的错误在at_css
上,如下所示:
NoMethodError (undefined method `at_css' for #<Requester:0x007f685d971478>
你混淆了require
和include
.
require
加载文件或 Gem。
include
包括另一个对象的方法。
a.rb
:
module A
def hello
"hello world"
end
end
b.rb
:
require 'a'
class B
include A
end
puts B.new.hello # hello world
但是,您确实需要重新考虑您要做什么。您不能包含类 - 扩展类。您要查找的对象是类Nokogiri::HTML::Document
。
如果您尝试构建文档爬网程序,则可以使用委托人模式:
require 'nokogiri'
class Requester < Delegator
def initialize(body)
super
@body = body
@doc = Nokogiri::HTML(body)
end
def __getobj__
@doc
end
end
或者,您将创建一个 Nokogiri::HTML::Document
的子类。
- http://www.nokogiri.org/tutorials/searching_a_xml_html_document.html
- http://ruby-doc.org/stdlib-2.2.1/libdoc/delegate/rdoc/Delegator.html