加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

ruby-on-rails – 在序列化哈希时,ActiveRecord将符号键转换为字

发布时间:2020-12-17 03:14:51 所属栏目:百科 来源:网络整理
导读:我有一个带有序列化Hash属性的Rails模型类,如下所示: class Action serialize :metadata,Hash # . . .end 该列存储在具有YAML编码的文本列中.问题是当我将元数据值传递给create时!方法,哈希键从符号转换为字符串,但该转换不会在其他时间发生.例如: $rails
我有一个带有序列化Hash属性的Rails模型类,如下所示:

class Action
  serialize :metadata,Hash
  # . . .
end

该列存储在具有YAML编码的文本列中.问题是当我将元数据值传递给create时!方法,哈希键从符号转换为字符串,但该转换不会在其他时间发生.例如:

$rails console
> a = Action.create!(:metadata => {:foo => "bar"})
> a.metadata
 => {"foo"=>"bar"}
> a.metadata[:fizz] = "buzz"
> a.metadata
 => {"foo"=>"bar",:fizz=>"buzz"}

现在,当我保存模型时,数据库将具有此文本值:

---
foo: bar
:fizz: buzz

有任何建议如何解决这个问题?

(这是使用Rails 3.0.16.)

解决方法

我自己回答这个问题,并提出@ Mori的建议:

class Action < ActiveRecord::Base
  def metadata=(v)
    self[:metadata] = v.try(:symbolize_keys!)
  end
end

据我所知,这可以在不破坏其他地方界面的情况下解决问题.我想如果我想要一把钥匙成为一个字符串,这种方法会给我带来一个令人讨厌的惊喜,但事实并非如此,所以我比其他提议的解决方案所带来的惊喜更愿意接受它.

顺便说一句,如果有人可以提出一个根本不需要这种解决方法的解决方案,我很乐意接受这个作为正确的答案.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读