有没有办法检查模型中的任何名称空间?Rails - 检查模型是否模块
即这就是我要寻找
Foo::Bar.modulized? = true
Bar.modulized? = false
支票为任何命名空间不特定模块
有没有办法检查模型中的任何名称空间?Rails - 检查模型是否模块
即这就是我要寻找
Foo::Bar.modulized? = true
Bar.modulized? = false
支票为任何命名空间不特定模块
你可以试试这个
Foo::Bar.ancestors.select {|o| o.class == Module }.include?(Foo)
或
Foo::Bar.included_modules.include?(Foo)
要检查该机型拥有的任何命名空间或没有,你可以做到这一点
Foo::Bar.parent == Foo #=> true
或者干脆
Foo::Bar.parent.is_a? Module #=> true
希望帮助!
我应该这样做:
ActiveRecord::Base.name.include?('ActiveRecord::') # => true
要检查是否模型与任何模块模组化,只是做:
ActiveRecord::Base.name.include?('::')
但是,要知道,它会为内部类返回true :
class Main
class Inner
end
end
clazz = Main::Inner
clazz.name.include?('::')
希望它有帮助!
我需要检查任何模块不只是一个特定的。但是,这给了我一个想法,这将工作'ActiveRecord :: Base.name。包括(“::”)#=>真'我想不出它会导致任何问题? –
我觉得没有这样的方法,但你可以使用模块::嵌套来实现它,比如,如果你有一个嵌套类:
module A
class B
puts Module.nesting.inspect
end
end
前面代码的输出是:[A::B, B]
如果你的类没有嵌套:
class C
puts Module.nesting.inspect
end
输出将是:[C]
那么,你可以创建一个模块与模块?类方法:
- 在lib目录中创建一个名为active_record_extension.rb的文件。
module ActiveRecordExtension
extend ActiveSupport::Concern
module ClassMethods
def modulized?
Module.nesting.size > 1
end
end
end
ActiveRecord::Base.send(:include, ActiveRecordExtension)
创建在config/initializers目录名为extensions.rb中一个文件,下面的行添加到文件:
require "active_record_extension"
HM,对我来说'MyMod :: MyClass.ancestors.select {| Ø| o.class == Module} .include?(MyMod)#=> false' –
非常感谢RSB,但我应该更具体。我正在查看模型是否有任何名称空间不是特定的名称空间。 –
我编辑了答案 – RSB