我在我的产品模型中使用序列化列:
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子句中的序列化属性。
请帮忙。非常感谢!!
答案 0 :(得分:0)
当您的列被序列化时,它内部是ruby代码,这意味着您需要Ruby来“过滤”此列。重要的是要知道你的应用可能需要一段时间来执行此操作,具体取决于您在数据库中的产品编号。
Product.scoped.select{ |p| p.price[:value] > 200 }.count
Product.scoped
与Product.all
类似。
您可能需要将p.price[:value]
转换为int
(似乎是数据库中的字符串)。