我使用的是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的所有产品。
是否有任何宝石可以实现这个?
答案 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