Ruby - 迭代模块

时间:2016-02-10 10:12:03

标签: ruby-on-rails ruby module

我在Ruby-on-Rails中有一个版本化的API。不同的控制器和服务的作用域如下:

class Api::V1::Navigation < Api::Navigation

但是我的代码的某些部分需要调用某些服务的每个版本。我怎么能迭代它们呢?

我试过这个:

defined? eval('Api::V1')::Navigation

问题是即使有一个不存在的版本,它仍然有效:

defined? eval('Api::V24')::Navigation
=> "method"

我怎么知道版本是否存在?

2 个答案:

答案 0 :(得分:1)

您可以使用constants

module API
  module V1
    class Navigation
    end
  end

  module V2
    class Navigation
    end
  end
end

API.constants
# => [:V1, :V2]
API.constants.include?(:V1)
# => true
API.constants.include?(:V24)
# => false

答案 1 :(得分:1)

此代码可以提供帮助。如果您使用const_defined?方法。

module API
end

module API::V1
  class Navigator
  end
end

module API::V2
  class Navigator
  end
end


API.const_defined?(:V1)
# => true
API.const_defined?(:V5)
# => false