0

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
4

1 に答える 1

2

投稿してすぐに答えに出くわしました。答えは次のように更新conds = joins(:product)することでした:

conds = joins(:product, { :product => :categorizations })
于 2012-09-14T20:47:43.420 に答える