给定两个名为
的模型 SomeModule::V1::Api
SomeModule::V2::Api
我想在我的控制器中拨打电话,如:
api = SomeModule::V1::Api
但是“V1”部分是一个变量,因此我可以在版本之间进行交换。
关于如何实现这一目标的任何想法?
答案 0 :(得分:1)
v = 'V1'
"SomeModule::#{v}::Api".constantize
=> SomeModule::V1::Api
示例:
module SomeModule
module V1; end
module V2; end
end
class SomeModule::V1::Api
def self.foo; 'V1 foo'; end
end
class SomeModule::V2::Api
def self.foo; 'V2 foo'; end
end
v = 'V1'
puts "SomeModule::#{v}::Api".constantize.foo
=> V1 foo
v = 'V2'
puts "SomeModule::#{v}::Api".constantize.foo
=> V2 foo
答案 1 :(得分:1)
如果您不想使用#constantize
(这是ActiveSupport的一部分),您可以使用Plain Old Ruby执行此操作:
version = "V1"
SomeModule.const_get(version).const_get("Api")
# => SomeModule::V1::Api