如何在另一个类中的方法中引用不同类中的方法?

时间:2016-09-29 08:08:01

标签: ruby inheritance

我在文件lib/crawler/page-crawler.rb中有一个模块和类,如下所示:

require 'oga'
require 'net/http'
require 'pry'

module YPCrawler
  class PageCrawler

    attr_accessor :url

    def initialize(url)
      @url = url
    end

    def get_page_listings
      body = Net::HTTP.get(URI.parse(@url))
      document = Oga.parse_html(body)
      document.css('div.result')
    end

    newpage = PageCrawler.new "http://www.someurl"
    @listings = newpage.get_page_listings
    @listings.each do |listing|
      bizname = YPCrawler::ListingCrawler.new listing['id']
    end
  end
end

然后我有另一个模块&另一个文件lib/crawler/listing-crawler.rb中的类看起来像这样:

require 'oga'
require 'pry'

module YPCrawler
  class ListingCrawler
    def initialize(id)
      @id = id
    end

    def extract_busines_name
      binding.pry
    end

  end
end

但是,当我尝试运行此脚本ruby lib/yp-crawler.rb执行上面的page-crawler.rb文件而没有YPCrawler调用时,我收到此错误:

/lib/crawler/page-crawler.rb:23:in `block in <class:PageCrawler>': uninitialized constant YPCrawler::ListingCrawler (NameError)

问题出在这一行:

bizname = YPCrawler::ListingCrawler.new listing['id']

那么如何从page-crawler.rb中的迭代器中调用那个?

修改1

当我执行`ListingCrawler.new listing ['id']时,我收到以下错误:

 uninitialized constant YPCrawler::PageCrawler::ListingCrawler (NameError)

修改2

这是我项目的目录结构:

directory-structure

编辑3

我的yp-crawler.rb看起来像这样:

require_relative "yp-crawler/version"
require_relative "crawler/page-crawler"
require_relative "crawler/listing-crawler"

module YPCrawler
end

2 个答案:

答案 0 :(得分:1)

试试这个,在你的 yp-crawler.rb 中添加一行:

ads = pd.read_csv(data_filename,header=None,converters=converters, na_values='?')

这应该会在运行时自动包含 / crawler 目录中的所有文件。可能想对其他目录做同样的事情。

如果有帮助,请告诉我:)。

答案 1 :(得分:1)

yp-crawler.rb文件中,根据您发布的结构,您应该具有以下内容:

require 'yp-crawler/version'
require 'crawler/listing-crawler'
require 'crawler/page-crawler'