ruby-on-rails - JSONB 不适用于 Rails 5? JSON 字段以字符串形式返回

标签 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

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

显然,根据 this issue,这现在是 rails 中的“预期行为” .不确定现在如何进行这项工作...

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

最佳答案

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

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

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

更新

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

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

关于ruby-on-rails - JSONB 不适用于 Rails 5? JSON 字段以字符串形式返回,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38927315/

相关文章:

ruby-on-rails - 验证终端命令已在 Rails 中成功运行的最佳方法是什么?

ruby-on-rails - rails 数组维护顺序

javascript - 带 JSON 的 JQuery 选择器

ruby-on-rails - Rails 查询 : Filter by properties in another table

ruby-on-rails - 使用大量种子数据测试 Rails 应用程序

php - json_encode/json_decode 与 Zend_Json::encode/Zend_Json::decode

jquery - $.ajax 和 JSON。解析错误未捕获的 SyntaxError : Unexpected token :

javascript - 通过列中的唯一值来限制限制

r - src_postgres 和 dbConnect 函数将 R 与 postgres 连接的区别

PostgreSQL 列出一个查询,然后最后一行包含一个总和