1

カテゴリに属する​​製品があります。また、カテゴリは、自己結合を使用して親と子を持つことでツリー構造を構成します。

協会:

class Category < ActiveRecord::Base
  has_many :children, class_name: "Category", foreign_key: "parent_id"
  belongs_to :parent, class_name: "Category"
end

class Product < ActiveRecord::Base
  belongs_to :category
end

例えば、

Fruits & Vegetables     =>    "High" Category 
Fresh Fruits            =>    "Intermediate" Category
Citrus                  =>    "Low" Category
Limes Large             =>    Product

Thinking Sphinx を使用して、製品の「低」カテゴリ名と「高」カテゴリ名の両方、およびツリー階層内のその間にあるすべてのカテゴリ名のインデックスを作成したいと考えています。

次のように、低カテゴリの親の名前をインデックス化するのに問題はありませんでした。

class Product < ActiveRecord::Base
  indexes :name
  indexes category.parent.name, as: :low_category
end

注: 「高」カテゴリと「低」カテゴリの間のノード数は可変です。階層名を動的に追加する方法が必要です。

しかし、ツリーのさらに上のカテゴリ名に索引を付けるにはどうすればよいでしょうか? TS インデックス作成でメソッドを使用できないことはわかっていますが、データベースをセットアップするにはどうすればよいですか?

最も重要なことは、「高」カテゴリ名をどのように索引付けするのですか?

4

1 に答える 1

1

あなたはこれができますか ?

class Product < ActiveRecord::Base
  indexes :name

  category = category.parent
  indexes category.name, as: :low_category

  while category.parent do
    if category.parent
      indexes category.name, as: :root_category
    elsif category.parent
      indexes category.name, as: :high_category
    else
      indexes category.name
    end

    category = category.parent
  end
end
于 2012-08-07T18:36:30.667 に答える