2013-04-30 43 views
0

您好我有兩個模塊確定給定的模塊導軌引擎

  1. 聯繫
  2. 博客(blog是Rails引擎) 其中Admin是命名空間的應用程序的管理功能模塊,而博客是一個模塊代表軌道引擎。有沒有更好的方法來確定哪些是引擎,就像一個函數「is_engine」?

Admin.is_engine?

=> false

Blog.is_engine?

=>真

肯定我可以試試抓的事情,以確定此

def is_engine? module 
    module::Engine 
    true 
rescue NameError 
    false 
end 

這裏

is_engine? Admin 

將返回false

is_engine? Blog 

將返回true

感謝

+0

這裏是rails引擎的文檔,它可能對你有所幫助。根據你的目的,你將不得不使用相同的方法。 – 2013-04-30 08:02:30

+0

一個rails引擎是一個類,而不是一個模塊。 – giorgian 2013-04-30 08:06:27

+0

@SumitMunot請參閱有問題的修改。 – 2013-04-30 08:53:54

回答

3

我不知道我明白你正在嘗試做的:Rails的引擎是一類(的Rails::Engine一個子類),而不是一個模塊。

如果你有一個實例,你可以使用:

admin.kind_of?(Rails::Engine) 

如果你有一個,你可以使用:

Something.ancestors.include?(Rails::Engine) 

如果你擁有的是一個模塊,那麼它不能是Rails :: Engine的一個子類,它不是引擎。

編輯

如果你有一個模塊或恆定something,想知道是否有在其命名空間中某個名稱的常量,你可以使用:

something.constants.include?(:Engine) 
+0

這真是太棒了,這就是我一直在尋找的東西。非常感謝。 – 2013-04-30 11:49:47