我想要动态生成一个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}"
但似乎这些都没起到作用 :/
我能否找到一种方法来检索基类名称(不确定如何称呼包含我的模块的类)。我已经为此问题苦苦挣扎了几个小时,但似乎找不到一个简洁的解决方案 :(
谢谢!
included do #... end
块中使用了define_singleton_method
方法:define_singleton_method "#{self.name}_status" do #... end
。 - cl3m