簡體   English   中英

Rails-檢查模型是否已模塊化

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM