私の ROR アプリには、Category、Item、Property、PropertyValuation というモデルがあります。カテゴリにはアイテムが含まれ、アイテムには複数のプロパティがあるという考え方です。PropertyValuation の目的は、特定のアイテムのプロパティ値を格納することです。モデルは上記のように定義されています。
class Category < ActiveRecord::Base
attr_accessible :name, :description, :parent, :children, :items, :parent_id
has_many :children, :class_name => "Category", :foreign_key => "parent_id", :dependent => :nullify
belongs_to :parent, :class_name => "Category"
has_many :categorizations
has_many :items, :through => :categorizations
end
class Item < ActiveRecord::Base
attr_accessible :name, :description, :property_valuations, :barcode
has_many :property_valuations, :dependent => :destroy
has_many :properties, :through => :property_valuations
has_many :categorizations
has_many :categories, :through => :categorizations
end
class Property < ActiveRecord::Base
attr_accessible :name, :description, :value_type, :unit, :unit_id
has_many :property_valuations, :dependent => :destroy
has_many :items, :through => :property_valuations
has_many :property_ranges, :dependent => :destroy
belongs_to :unit
end
class PropertyValuation < ActiveRecord::Base
attr_accessible :property, :item, :value, :categorization
belongs_to :property
belongs_to :item
end
私の質問ですが、これを行うことでカテゴリ項目を名前でフィルタリングすることに成功しました:
@category.items.where("lower(items.name) like ?", "%#{params[:keywords].downcase}%")
しかし、関連するプロパティ値に応じて、これらのアイテムをフィルター処理したいと考えています。例: 名前に「foo」が含まれ、プロパティ「A」の値が 1、プロパティ B の値が 2 などのカテゴリ項目が必要です。このようなクエリを実装するにはどうすればよいですか?