我只是偶然发现了一个奇怪的问题,我真的不明白是什么原因造成的。
在我们的 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
都在那里并且像往常一样工作。
我做错了吗?