当值用作Object.const_get的参数时,无法将Configatron :: Store转换为String错误

时间:2014-11-13 15:50:11

标签: ruby configatron

我最近用Configatron取代了本土配置模块,但是我无法使用一个用例。

当我尝试使用configatron值作为Object.const_get的参数时,这样:

def formatter_class
  Object.const_get(configatron.formatter)
end

我收到以下错误:

file.rb:10:in `const_get': can't convert Configatron::Store to String 
  (Configatron::Store#to_str gives Configatron::Store) (TypeError)

configatron任务看起来像这样(简化):

configatron.formatter = case
                          when condition?
                            'ExportFormat'
                          else
                            'ScreenFormat'
                        end

即使我configatron.formatter = 'ScreenFormat',我也会遇到同样的错误。

我也尝试了formatter_class方法的变体。这失败了:

def formatter_class
  Object.const_get(configatron['formatter'])
end

当然,这成功了,但不能完成我的用例:

def formatter_class
  Object.const_get('ScreenFormat')
end

我做错了什么?

2 个答案:

答案 0 :(得分:2)

我解决了我的问题。事实证明,您可以致电configatron.whatever,如果未初始化,则会返回Configatron::Store

我在访问该值之前插入了对configatron.has_key? 'formatter'的调用。当它返回false时,我发现错误发生在尚未初始化值的代码路径中。初始化值后,错误不再出现。

答案 1 :(得分:0)

.yml配置文件丢失时发生。或者您正在寻找的钥匙不在那里。

位置: /config/NAME.yml