隐式转换哈希到字符串

时间:2018-02-21 11:40:52

标签: ruby-on-rails ruby

我收到了这个错误。

  

“没有将哈希隐式转换为字符串”

这是我的.rb文件。任何人都可以建议我解决方案。

def themify_colors
    if Store.Configurations['themify_colors'].present?
        @themify_colors = JSON.parse(Store.Configurations['themify_colors'])
    end
end

2 个答案:

答案 0 :(得分:0)

JSON.parse只接受字符串作为参数,默认情况下返回哈希。但是在你的情况下你已经传递了Hash,这就是为什么JSON.parse会抛出错误。

http://ruby-doc.org/stdlib-2.0.0/libdoc/json/rdoc/JSON.html

def themify_colors
    @themify_colors = Store.Configurations['themify_colors'] 
    @themify_colors = JSON.parse(@themify_colors) unless @themify_colors.is_a?(Hash)
end

答案 1 :(得分:0)

您应该添加一个条件以避免重新分配变量,并在尝试解析变量之前检查Store.Configurations['themify_colors']是否为字符串。

def themify_colors
  unless @themify_colors
    config = Store.Configurations['themify_colors']
    @themify_colors = config.is_a?(String) ? JSON.parse(config) : config  
  end
  @themify_colors
end

即便如此,它仍然不完美,是重构的主要内容。解析配置更有可能在应用程序的初始化中完成 - 而不是在使用该值的getter中。