【发布时间】:2017-12-14 02:34:09
【问题描述】:
我无法通过查询找到相关记录。
这是我的测试记录:
model: Submission
column name: contents (jsonb)
记录创建者:Submission.create(contents: {ada: 'ada'})
这里是查询:Submission.where("contents->>'ada'='ada'").first
结果是nil
记录在数据库中并且(假设记录 id=1)
Submission.find(1).contents[:ada]=='ada'
结果为@987654326@
【问题讨论】:
-
您的查询没有明显问题。不过,您的 健全性检查 似乎有问题。我会 认为 它会返回 false,因为
ada键不是符号。 (刚刚使用您的示例在本地进行了快速测试,我能够按预期创建/查询,并且您的完整性检查失败,除非我使用contents['ada']=='ada'。)您能否包括您的架构?您的列是否有可能实际上不是 jsonb 类型? -
感谢您的回复,如您所描述的,健全性检查结果为真,如果按照您的方式完成,则结果为假。根据 pgAdmin,列是 jsonb(我曾经将它作为 var char,但是当它开始抛出错误时,我意识到我忘了把它变成一个实际的 jsonb)
-
这是提交模式的一部分:create_table "submissions", force: :cascade do |t| t.integer "user_id" t.string "name", 默认: "" t.string "contents_old", 默认: "" t.datetime "created_at", null: false t.datetime "updated_at", null: false t. jsonb "contents", 默认: {}, null: false t.index ["contents"], name: "index_submissions_on_contents", using: :gin t.index ["user_id"], name: "index_submissions_on_user_id", using: : btree结束
标签: ruby-on-rails postgresql jsonb