在ruby 2.0中使用钩子方法时的NoMethodError

时间:2014-02-14 19:41:58

标签: ruby ruby-2.0

我正在编写关于Code School的Ruby Bits课程,在第5级它们将涵盖模块。

在钩子方法部分,为LibraryUtils模块添加一个self.included方法钩子是一个挑战,它将扩展传入类中的ClassMethods。代码如下:

module LibraryUtils

  def add_game(game)
  end

  def remove_game(game)
  end

  module ClassMethods
    def search_by_game_name(name)
    end
  end
end

class AtariLibrary
  include LibraryUtils
  extend LibraryUtils::ClassMethods
end

非常简单容易。首先在我们的模块中包含所述方法,如下所示:

def self.included(base)
  base.extend(ClassMethods)
end

然后只是取出延伸,这样我们就不会有两面性。

问题是,当我在使用Ruby 2.0的codechool环境(浏览器)之外尝试这个时,我得到一个No Method Error:

atari_library.rb:27:in `<main>': undefined method `search_by_game_name' for #<AtariLibrary:0x2b07ef8> (NoMethodError)

请记住,我使用相同的代码。

好吧,如果有人对此有任何想法,我会非常感激。

1 个答案:

答案 0 :(得分:0)

我唯一可以想到的是你做错了就是在AtariLibrary的一个实例而不是类上调用search_by_game_name,例如:

AtariLibrary.search_by_game_name('name') # => works

al = AtariLibrary.new
al.search_by_game_name('name') # undefined method `search_by_game_name' for #<AtariLibrary:0x007fe3e204ebb0> (NoMethodError)