2

我在我的产品模型中使用序列化列:

class Image < ActiveRecord::Base
   attr_accessible :id, :created_at, :updated_at, :price
   serialize :price
end

与序列化列一样,价格列被添加为文本列。price 属性还有 2 个属性“value”和“currency”,并存储在数据库中:

#<Product id: 1482, price: {:value=>"500", :currency=>"INR"}, created_at: "2013-05-30 14:35:17", updated_at: "2013-05-30 14:35:22">

现在我想获取价格值大于 200 美元的产品的数量,因此将活动记录查询编写为:

Product.where('price[:value] > ?', 200).count

但它给了我错误:

 ActiveRecord::StatementInvalid: Mysql2::Error: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '[:value] is not null)' at line 1: SELECT `products`.* FROM `products`  WHERE (price[:value] is > 200)  

我发现无法访问 where 子句中的序列化属性。

4

1 回答 1

0

当您的列被序列化时,它是其中的 ruby​​ 代码,这意味着您需要 Ruby 来“过滤”该列。要知道的重要一点是,您的应用程序执行此指令可能需要一段时间,具体取决于您在数据库中的产品编号。

Product.scoped.select{ |p| p.price[:value] > 200 }.count

Product.scoped类似于Product.all。您可能需要p.price[:value]变成一个int(似乎是数据库中的字符串)。

于 2013-06-03T14:21:18.783 回答