1

私は、Categoryparent_categories (カテゴリ自体) を持つ複雑なモデルを持っています。すべての第 3 レベルのカテゴリ (親を持つ親を持つカテゴリ) を検索するスコープを作成したいと考えています。

class Category < ActiveRecord::Base
  attr_accessible :title, :description, :parent_id, :category_image_attributes

  has_many :subcategories, class_name: 'Category', foreign_key: 'parent_id', dependent: :destroy
  belongs_to :parent_category, class_name: 'Category', foreign_key: 'parent_id'

ActiveRecordでこれをどのように達成しますか?

==更新==

だから私は最終的に自分でそれを理解しましたが、それを解決するためのより効率的な方法があるかどうかを確認するために、この質問を残します:

def self.all_third_level_categories
  all_ids_of_categories_with_parents = Category.where("parent_id IS NOT NULL").map { |c| c.id }
  Category.find_all_by_parent_id(all_ids_of_categories_with_parents)
end
4

1 に答える 1

0

@bcd のコメントを拡張すると、提供する実装では、深さ n のオブジェクトをフェッチするために n-1 クエリが必要になります。これはすぐに厄介になる可能性があります。

一方、保存場所のわずかなオーバーヘッド

def set_level
  self.level = parent_category.level + 1
end

物事を片付けることができます。

于 2013-11-05T22:26:15.797 に答える