我想检查记录是否已经存在于数据库中,但是我有一个json数据类型字段,我也需要对其进行比较。当我尝试使用检查时exists?
,出现以下错误:
SELECT 1 AS one FROM "arrangements"
WHERE "arrangements"."deleted_at" IS NULL AND "arrangements"."account_id" = 1
AND "arrangements"."receiver_id" = 19 AND "config"."hardware" = '---
category: mobile
serial: ''00000013''
vehicle:
' AND "arrangements"."recorded" = 't' LIMIT 1
PG::UndefinedTable: ERROR: missing FROM-clause entry for table "config"
LINE 1: ...id" = 1 AND "arrangements"."receiver_id" = 19 AND "config"."...
^
我用来检查是否存在的代码:
@arrangement = Arrangement.new({account_id: receiver.account.id, receiver_id: receiver.id, config: params[:config], recorded: true})
if Arrangement.exists?(account_id: @arrangement.account_id, receiver_id: @arrangement.receiver_id, config: @arrangement.config, recorded: @arrangement.recorded)
puts 'true'
end
我已经尝试过:
if Arrangement.exists?(@arrangement)
puts 'true'
end
但总是返回false
桌子:
create_table :arrangements do |t|
t.references :account, index: true
t.references :receiver, index: true
t.json :config, null: false
t.boolean :recorded, default: false
t.datetime :deleted_at, index: true
t.integer :created_by
t.timestamps
end
您无法比较json。尝试比较一些jsons值
where("arrangements.config->>'category' = ?", params[:config][:category])
看在PostgreSQL的文档其他JSON功能和运营商
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句