我有一个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()吗?
答案 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切换到此。
我在查看一个完全不同的问题时随机结束了我的问题,但我想我会更新这个答案。
答案是默认值不是'{}'
,而是{}
。非常简单的修复:)