2

我只是偶然发现了一个奇怪的问题,我真的不明白是什么原因造成的。

在我们的 rails 应用程序中,让我们有一个 mixin Mixin

module Mixin
  def foo
    with_scope :find => ... do
      ...
    end
  end
end

它在include其他地方被编入模型类:

class Model < ActiveRecord::Base
  include Mixin
  ...
end

调用Model.new.foo导致错误:NoMethodError: undefined method with_scope

然后我将foo方法更改为:

  def foo
    self.class.with_scope :find => ... do
      ...
    end
  end

但这也会导致错误:NoMethodError: protected method with_scope called

这似乎很奇怪。我本来期望 mixin 方法的行为与Model. 我以前从来没有偶然发现过这个,因为所有的实例方法save都在那里并且像往常一样工作。

我做错了吗?

4

0 回答 0