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

时间:2016-08-12 22:34:30

标签: ruby-on-rails json postgresql

我有一个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()吗?

1 个答案:

答案 0 :(得分:8)

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

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

这似乎很奇怪,这将是使其工作所需的行为,但如果您想要先前的Rails 4功能,则需要根据Whats the algorithm to calculate aspect ratio? I need an output like: 4:3, 16:9切换到此。

更新

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

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