Я хочу динамически генерировать метод класса в Mixin на основе имени класса, которое включает этот Mixin.
Вот мой текущий код:
module MyModule
extend ActiveSupport::Concern
# def some_methods
# ...
# end
module ClassMethods
# Here is where I'm stuck...
define_method "#{self.name.downcase}_status" do
# do something...
end
end
end
class MyClass < ActiveRecord::Base
include MyModule
end
# What I'm trying to achieve:
MyClass.myclass_status
Но это дает мне следующее имя метода:
MyClass.mymodule::classmethods_status
Получение имени базового класса внутри определения метода работает (self, self.name...), но я не могу заставить его работать для имени метода...
До сих пор я пробовал
define_method "#{self}"
define_method "#{self.name"
define_method "#{self.class}"
define_method "#{self.class.name}"
define_method "#{self.model_name}"
define_method "#{self.parent.name}"
Но ничто из этого не похоже на трюк:/
Есть ли способ получить имя базового класса (не уверен, что вызывать класс, который включает мой модуль). Я уже несколько часов борюсь с этой проблемой, и я не могу понять, как это сделать: (
Спасибо!