【问题标题】:JSONB not working with Rails 5? JSON field returns as a stringJSONB 不适用于 Rails 5? JSON 字段以字符串形式返回
【发布时间】:2016-08-12 22:34:29
【问题描述】:

我有一个 jsonb 字段,无论出于何种原因,当我调用该字段时,它会以字符串形式返回。这是迁移:

class CreateConferences < ActiveRecord::Migration[5.0]
  def change
    create_table :conferences do |t|
      t.references :user
      t.string :name
      t.jsonb :payload, default: '{}'
      t.jsonb :processed_payload

      t.timestamps
    end
  end
end

如果我创建一个新会议 (Conference.create(user: user, name: 'test', payload: '{}')),然后获取它作为字符串返回的有效负载。我在这里错过了什么??

显然,根据this issue,这现在是 Rails 中的“预期行为”。现在不知道如何使这项工作......

猜我需要在每次请求后调用 JSON.parse() 吗?

【问题讨论】:

  • 所以你现在应该说t.jsonb :payload, default: {},而你最终在数据库中得到了一个奇怪的默认值? \d conferences 从内部 psql 到底说了什么?

标签: ruby-on-rails json postgresql


【解决方案1】:

我目前的解决方案是使用下面的getter方法:

def payload
    (self[:payload].class == String) ? JSON.parse(self[:payload]) : self[:payload]
end

这似乎很奇怪,这是使其工作所需的行为,但如果您想要以前的 Rails 4 功能,则需要根据 the comments here 切换到此功能。

更新

我在调查一个完全不同的问题时随机结束了我的问题,但我想我会更新这个答案。

答案是默认值不是'{}',而是{}。很简单的修复:)

【讨论】:

    猜你喜欢
    • 2022-01-03
    • 2015-04-02
    • 1970-01-01
    • 2020-07-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-04-08
    相关资源
    最近更新 更多