我有一个交易模型,它有一个名为“信息”的属性,结构如下:
在交易的“信息”栏内:
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"}]
该列在 mligration 中定义为 json
add_column :deals, :info, :json, default: '[]'
如何在 jsonb 中使用事件记录查询?
查找信息至少包含一个 deal_id = 4 的所有交易
找到所有信息至少包含一个 json block ({ }) 并带有名为“image1”的键(它应该只输出 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 ) 编写所有这些来实现您的第二个要点。
关于ruby-on-rails - 使用 Active Record 查询 json 数组 (Rails 4/postgresql9.4),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31462559/