【发布时间】:2019-07-02 10:21:21
【问题描述】:
我有一个模型/表,其中有一个 json 列,如下所示
t.json :options, default: {}
该列可以包含许多键,类似于这样
options = {"details" : {key1: "Value1", key2: "Value2"}}
我想轻松设置和获取这些值。所以我为相同的方法制作了 getter 和 setter。
def key1
options['details']&.[]('key1')
end
def key1=(value)
options['details'] ||= {}
options['details']['key1'] ||=0
options['details']['key1'] += value
end
但这只是在我的代码中添加了行,并且在添加更多细节时它不会扩展。你能建议一个干净整洁的方法吗?
【问题讨论】:
-
options['details']&.[]('key1')使用安全运算符的巧妙方法! -
@Tom 聪明的方法是使用
Hash#default_proc:) -
@AlekseiMatiushkin 是的,这是一种方式。使用
Hash#[]的长格式以便可以使用安全运算符表明对Ruby 有很好的理解。我想指出这是一个通常不会被想到的巧妙的小技巧。
标签: ruby-on-rails json ruby ruby-on-rails-4 getter-setter