如何正确覆盖模块混合蛋白的方法



我使用的是Ruby 1.9.2,Ruby在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应用程序浏览页面时,即使我在包括MyModuleMyClass中覆盖了my_method(正如您可以在上面的代码中阅读),我也会得到错误"NotImplementedError - The :my_method is not implemented yet"。发生在班级之前加载视图是因为它发生了吗?或者是什么?我应该如何处理情况,以使MyClass正确覆盖my_method

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

如果没有透露任何内容,请转到代码中的位置,并添加一对debug debug debug debug off inter语句:

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

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

最新更新