我有一个模型/表,其中有一个json列,如下所示
t.json :options, default: {}
列中可以包含许多键,如下所示
options = {"details" : {key1: "Value1", key2: "Value2"}}
我想轻松地设置和获取这些值。所以我也做了同样的盖特和塞特。
def key1
options['details']&.[]('key1')
end
def key1=(value)
options['details'] ||= {}
options['details']['key1'] ||=0
options['details']['key1'] += value
end
但这只会在我的代码中添加行,并且在添加更多细节时不会缩放。你能推荐一种干净整洁的方法吗?
最佳答案
使用动态方法创建:
options['details'].default_proc = ->(_,_) {{}}
ALLOWED_KEYS = %i[key1 key2 key3]
ALLOWED_KEYS.each do |key|
define_method key do
options['details'][key] if options['details'].key?(key)
end
define_method "#{key}=" do |value|
(options['details'][key] ||= 0) += value
end
end
关于ruby-on-rails - 在Rails中获取和设置json列键的巧妙方法,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/54587936/