where子句Rails中的序列化列

时间:2013-06-03 14:16:02

标签: ruby-on-rails activerecord serialization

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

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

price列被添加为文本列,如序列化列所做。 price属性还有2个属性'value'和'currency',并存储在Database中:

#<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子句中的序列化属性。

请帮忙。非常感谢!!

1 个答案:

答案 0 :(得分:0)

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

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

Product.scopedProduct.all类似。 您可能需要将p.price[:value]转换为int(似乎是数据库中的字符串)。