the scarce instructions 中,我读过有关在迁移中添加 Postgres 的数据类型 jsonb 的内容,它看起来像这样:

create_table :ref_check_ins do |t|
  t.jsonb :document, null: false, default: '{}'
  t.index :document, using: :gin
end

但是是否有任何理由反对默认为 Hash intead of String,即 {} 而不是 '{}'

将其定义为 String 类型时,该列的类:
String < Object

将其定义为 Hash 类型时,该列的类:
Hash

最佳答案

在迁移文件中,您将要使用 {}'{}'

我真的只是为此苦苦挣扎了一段时间,问题是我认为 PG 适配器隐含地知道如何将哈希转换为 jsonb 对象。它不像 postgres 数据库中的 json 类型,你存储的是一个 json 对象的字符串值,而是一个实际的二进制对象(在 jsonb 中)。我可能会在某个地方的 Rails 4.2 发布代码中挖掘它,但是,如果您正在查看它的薄文档(我将在不久的将来添加到其中),这里的关键是您当您执行 '{}' 时,实际上重新从 Postgres 取回一个字符串,因此当您尝试 indifferent_access 时,它失败了,因为字符串不能具有无差别访问。这可能是我第一次提醒他们提供的信息存在一些问题。

老实说,我无论如何都不会直接使用 {} ,而是更喜欢 [] 而不是 {} ,因为通常我正在处理非常具体的日志记录功能,我希望在记录上显式显示,而不必将两个大表连接在一起。这是我在 5.0 上的特殊用例,如果您小于 5,可能会有所不同,但可能相差不大。

关于ruby-on-rails - 我应该在迁移中默认 jsonb 为 '{}' 还是 {},我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/37616292/

10-14 02:39