确定给定的模块是rails引擎

时间:2013-04-30 07:54:15

标签: ruby ruby-on-rails-3 rails-engines

您好我有两个模块

  1. 管理
  2. 博客(博客是铁路引擎) Admin是appspace管理员功能的模块,但Blog是代表rails引擎的模块。有没有更好的方法来确定它们中的哪个是引擎,就像函数“is_engine?”
  3.   

    Admin.is_engine?

         

    =>假的

         

    Blog.is_engine?

         

    =>真

    肯定我可以尝试一下来确定这个

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

    这里

    is_engine? Admin
    

    将返回false

    is_engine? Blog
    

    将返回true

    由于

1 个答案:

答案 0 :(得分:3)

我不确定我是否理解你要做的事情:Rails Engine是一个类(Rails::Engine的子类),而不是模块。

如果您有实例,则可以使用:

admin.kind_of?(Rails::Engine)

如果您有,则可以使用:

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

如果你拥有的是一个模块,那么它不能是Rails :: Engine的子类,而且它不是引擎。

修改

如果你有一个模块或常量something并且想知道它的命名空间中是否有一个具有某个名称的常量,你可以使用:

something.constants.include?(:Engine)