gpt4 book ai didi

ruby-on-rails - Rails 返回 JSON 序列化属性 with_indifferent_access

转载 作者:数据小太阳 更新时间:2023-10-29 06:38:48 29 4
gpt4 key购买 nike

我以前有:

serialize :params, JSON

但这会返回 JSON 并将哈希键符号转换为字符串。我想使用符号引用散列,这在使用散列时最常见。我给它提供符号,Rails 返回字符串。为了避免这种情况,我创建了自己的 getter/setter。 setter 很简单(JSON 编码),getter 是:

  def params
read_attribute(:params) || JSON.parse(read_attribute(:params).to_json).with_indifferent_access
end

我不能直接引用 params 因为那会导致循环,所以我使用 read_attribute,现在我的哈希键可以用符号或字符串引用.但是,这不会更新哈希:

model.params.merge!(test: 'test')
puts model.params # => returns default params without merge

这让我觉得散列被副本引用了。

我的问题是双重的。我可以扩展事件记录 JSON 序列化以返回无关的访问哈希(或不将符号转换为字符串),并且仍然像上面那样使用合并进行哈希工作吗?如果不是,我可以做些什么来改进我的 getter 以便 model.params.merge! 工作?

我希望得到类似(有效)的东西:

  def params_merge!(hash)
write_attribute(:params, read_attribute(:params).merge(hash))
end

# usage: model.params_merge!(test: 'test')

更好的是,只需让 Rails 返回一个无差异访问的散列,或者不将我的符号转换为字符串!感谢任何帮助。

最佳答案

使用内置的 serialize 方法:

class Whatever < ActiveRecord::Base
serialize :params, HashWithIndifferentAccess
end

参见 ActiveRecord::Base docs on serialization了解更多信息。

关于ruby-on-rails - Rails 返回 JSON 序列化属性 with_indifferent_access,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14568983/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com