Я просто наткнулся на странную проблему, и я не совсем понимаю, что является причиной этого.
В нашем приложении rails есть миксин 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
, существуют и работают как обычно.
Я все делаю неправильно?