Relationship.with_attributes
複数の入力パラメーターに基づいて複雑なスコープを構築し、Relationship
特定の属性に一致する製品に関連付けられたオブジェクトを返すために使用するクラスメソッドがあります。ほとんどの場合、私が照合する情報はProduct
モデル上にあり、すべてが順調です。
def self.with_attributes(attributes)
if (attributes.nil?)
scoped
else # (attributes.class == Hash)
conds = joins(:product)
attributes.each do |key, value|
case key
when "Category"
# FIXME This doesn't work yet
category = Category.find(value)
categories = [category] + category.descendants
categories.each { |c| conds.push(["categories.id = #{c.id}"], :or) }
else
conds.where(key => value)
end
end
end
conds
end
Categorizations
課題は、属性がカテゴリである場合にモデルに参加する方法を決定できなかったことです。どんなアドバイスも大歓迎です。簡略モデルは以下のとおりです。
class Relationship < ActiveRecord::Base
belongs_to :product
…
end
class Product < ActiveRecord::Base
has_many :relations
has_many :categorizations
…
end
class Categorizations < ActiveRecord::Base
belongs_to :product
…
end