有沒有辦法檢查模型中的任何名稱空間?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