Product モデルでシリアル化された列を次のように使用しています。
class Image < ActiveRecord::Base
attr_accessible :id, :created_at, :updated_at, :price
serialize :price
end
シリアル化された列の場合と同様に、価格列がテキスト列として追加されます。価格属性には、さらに 2 つの属性「値」と「通貨」があり、次のようにデータベースに保存されます。
#<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句でシリアル化された属性にアクセスする方法が見つかりません。