[英]Rails - Check if model is modulized
有沒有一種方法可以檢查模型中的任何名稱空間?
即這就是我要尋找的
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?('::')
希望能幫助到你!
我認為沒有這種方法,但是您可以使用Module :: nested來實現它,例如,如果您有一個嵌套類:
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"
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.