2014-03-07 112 views
4

我使用Rails-4,有产品型号及存储规格JSON类型Postgres里的JSON数据类型查询Rails的4

在迁移文件,添加 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]}>

我要对产品的Specification.eg查询:获取等级(内部规格)所有产品等于4

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

+0

这是什么运气? –

+0

使用的Serian宝石 - 手动执行。计划移动弹性搜索而不是手动。 –

回答

1

随着jsonb在Rails的4.2出现在Postgres 9.4,你可以这样做,如果该分级字段是一个字符串,而不是一个整数。下面是一个例子。

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了解关于如何使用的更多信息。