查询postgres Rails-4中的Json数据类型

时间:2014-03-07 13:06:19

标签: ruby postgresql ruby-on-rails-4 postgresql-9.2 hstore

我使用的是Rails-4,产品型号和存储的规格为JSon类型

在迁移文件中,添加 add_column :products, :specifications, :json

示例产品记录看起来像

#<Product id: 1, prod_id: 525141, cat_id: 6716, category_id: 5, updated: "2013-09-24 07:37:20", created_at: "2014-03-07 12:21:34", updated_at: "2014-03-07 12:32:36", eans: ["4016032274001"], skus: ["DK-1511-010F/WH"], account_id: 2, specifications: {"network"=>["PCI-Express 2.1 16x", "CardBus", "PCI-Express 3.0 16x", "PCI 64-bit, 66MHz", "PCI 64-bit, 33MHz", "PCI 32-bit, 66MHz", "PCI 3.0", "PCI 2.3", "PCI 2.2", "PCI-X", "PCI-Express 16x", "PCI-Express 8x", "PCI-Express 4x", "PCI-Express 2.0 16x", "PCI-Express 1x", "PCI", "PC Card", "ISA", "AGP 8x", "AGP 4x", "AGP 2x", "AGP 1x"], "rating"=>[4]}>

我想查询产品的规格.eg:获得评级(内部规格)等于4的所有产品。

是否有任何宝石可以实现这个?

2 个答案:

答案 0 :(得分:1)

随着带有Postgres 9.4的Rails 4.2中jsonb的出现,如果rating字段是字符串而不是整数,则可以这样做。以下是一个例子。

Dynamic.create(payload: {"rating"=>['4']})
Dynamic.create(payload: {"rating"=>['3']})
Dynamic.where("payload -> 'rating' ? '4'").count

这将为您提供正确的记录。您必须将json字段更新为jsonb。您可以按照我的回复here执行此操作。

您可以找到有关如何使用jsonb in Rails 4.2 here的更多信息。

答案 1 :(得分:0)

是的,通过这个Gem在Rails中实现了JSONQuery:https://github.com/jcoglan/siren