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

5

我正在使用Rails-4,有一个Product模型并将规格存储为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]}>

我想查询产品的规格。例如:获取所有评级(在规格内)等于4的产品。

是否有可用的gem来实现这个功能?


使用了Serian gem - 手动实现。计划将其替换为Elasticsearch。 - Shamith c
2个回答

1

随着Rails 4.2和Postgres 9.4中jsonb的出现,如果评分字段是字符串而不是整数,则可以执行此操作。以下是一个示例。

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

这将为您提供正确的记录。您需要将json字段更新为jsonb。您可以按照我的回复这里进行操作。
您可以在此处了解有关如何使用Rails 4.2中的jsonb的更多信息。

0

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接