使用Active Record查询json数组(Rails 4 / postgresql9.4)

时间:2015-07-16 19:09:08

标签: ruby-on-rails json postgresql rails-postgresql jsonb

我的交易模型有一个名为'info'的属性,具有以下结构:

在Deal:

栏中的'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","text1":"qqq","video1":"sqsq"},{"deal_id":"5","text1":"sqqs","text2":"qq"}]

该柱在移植物中定义为json

add_column :deals, :info, :json, default: '[]'

如何在jsonb中使用活动记录查询?

  • 查找信息包含至少一个deal_id = 4的所有交易

  • 使用名为“image1”的键找到信息包含至少json块({})的所有交易(它应该只输出Deal1,而不是deal2)

1 个答案:

答案 0 :(得分:12)

我有一个类似的专栏,我不得不将列类型从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)编写所有这些来实现你的第二个要点。