我有一个Deal模型,它具有一个名为’info’的属性,具有以下结构:
交易中的’info’栏内:
Deal1.info = [{"deal_id":"4","text1":"qqq","text2":"sqsq","image1":"sqqs","video1":"sqsq"},{"deal_id":"5","text1":"sqqs","text2":"qq"}] # no image here inside the json Deal2.info = [{"deal_id":"4","text2":"qq"}]
该列在移民中被定义为json
add_column :deals,:info,:json,default: '[]'
如何在jsonb中使用活动记录查询?
>查找信息包含至少一个deal_id = 4的所有交易
>使用名为’image1’的键找到信息包含的所有交易以及至少json块({})(它应该只输出Deal1,而不是deal2)
解决方法
我有一个类似的列,我不得不将列类型从json更改为jsonb.
add_column:deals,:info,:jsonb,default:[],null:false,index:true
获取jsonb的数据类型后,我能够执行此类型的activerecord查询.
Info.where(‘deals @>?’,'[{“deal_id”:“4”}]’)
我不太确定如何用activerecord(http://www.postgresql.org/docs/9.4/static/functions-json.html#FUNCTIONS-JSONB-OP-TABLE)编写所有这些来实现你的第二个要点.
原文地址:https://www.jb51.cc/ruby/267552.html
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。