2

我正在使用 Ruby 1.9.2 和 Ruby on Rails 3.2.2。我有以下情况:

class MyClass < ActiveRecord::Base
  include MyModule1
  include MyModule2
  include ...

  # Note: This method statement should override the method mixedin by MyModule1.
  def my_method(*args)
    # ...
  end
end

module MyModule1
  def my_method(*args)
    raise "NotImplementedError - The :my_method is not implemented yet"
  end
end

# /app/views/layouts/application.html.erb
if @my_class.my_method
  All right!
end

当我启动我的 Web 应用程序浏览页面时,我得到错误"NotImplementedError - The :my_method is not implemented yet",即使我覆盖了my_method包含MyClass的内容MyModule(如您可以在上面的代码中阅读的那样)。发生这种情况是因为它加载了类之前的视图吗?或者是什么?我应该如何处理这种情况才能MyClass正确覆盖my_method

4

1 回答 1

2

肯定比您在此处显示的内容更多,因为您在此处显示的代码肯定不会调用#my_methodfrom MyModule1。非常仔细地检查def my_methodinMyClass没有拼写错误,并且它实际上出现在一个class MyClass块中,而不是在嵌套class << self块或类似的东西中。

如果这没有显示任何内容,请转到代码中出现异常的位置,并添加一些调试打印语句:

<% p @my_class.class %>
<% p @my_class.class.ancestors %>

查看控制台中打印的内容。

于 2012-10-27T15:30:40.140 回答