2013-04-30 41 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