Метод, вызываемый в моделях, будет вызываться, когда Ruby видит модуль, а не когда он включен.
module MyModule
running_a_class_method
end
# => NameError: undefined local variable or method ‘running_a_class_method’ for MyModule:Module
Вы должны убедиться, что вызов этого метода класса выполняется, когда модуль включен. В Ruby есть обработчик событий для включения, included
. Класс / модуль, в который вы его включаете, передается в качестве аргумента этому методу.
module MyModule
def self.included(base)
puts base
end
end
class Thing
include MyModule
# => Thing
end
Пример, который ближе к тому, чего вы хотите достичь:
module Resource
def self.included(base)
base.has_many :permissions
base.named_scope :foos, :conditions => ["..."]
end
end