JSONB不使用Rails 5?JSON字段以字符串形式返回

Nic*_*ill 6 postgresql json ruby-on-rails

我有一个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
Run Code Online (Sandbox Code Playgroud)

如果我创建一个新的conference(Conference.create(user: user, name: 'test', payload: '{}')),然后获取有效负载,它将以字符串形式返回.我在这里失踪了什么?

显然现在根据这个问题,这就是rails中的"预期行为" .不知道如何让这项工作现在......

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

Nic*_*ill 8

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

def payload
    (self[:payload].class == String) ? JSON.parse(self[:payload]) : self[:payload]
end
Run Code Online (Sandbox Code Playgroud)

这似乎很奇怪,它将是使其工作所需的行为,但如果您想要先前的Rails 4功能,您将需要根据此处的注释切换到此.

更新

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

答案是没有默认值'{}',而是{}.很简单的修复:)