0

私は2つのモデルを持っています:

Post
 - category_id

Category (ancestry model)

カテゴリツリーは、たとえば次のようになります。

- Root Category

  - Sub Category

ここで、投稿がサブカテゴリに分類されるとします。私はルートカテゴリに属しており、サブカテゴリに含まれるすべての投稿も表示したいと思います。これらも祖先で取得することは可能ですか?

カテゴリツリーには常にネストされたレベルが1つしかないため、祖先が多すぎる可能性があります。

前もって感謝します

ネストされた1つのレベルの実例

@category = Category.find(params[:id])
category_ids = @category.children.map(&:id) << @category.id
category_ids = category_ids.join(",")
@posts = Post.recent.where("category_id IN (#{category_ids})").page(params[:page])
4

2 に答える 2

8

次のようにすることをお勧めします。

Post.where(category_id: @category.subtree_ids)

また、本当に恐ろしいことをせずに、おそらく最も効率的な方法になるでしょう。

于 2013-03-15T16:50:44.710 に答える
1

何かのようなもの

Post.where('subcategory_id in ('+@category.subcategories.select(&:id).join(',')+')')

次に、@category.sucategories によって生成されたリストにカテゴリ ID を持つ投稿をリクエストします。そこから ID を選択し、それらを「1,5,77」のような文字列にマージします。

非常に悪いことをするのは(ただの楽しみのためです):

@mylist = Array.new
Post.all.each do |item|
  @mylist << item if item.subcategory.category = @selectedrootcategory

更新:他の解決策を考えてみました:

@allposts = Array.new
@selectedrootcategory.includes(:subcategory => :posts).subcategories.each do |subcat|
  @allposts << subcat.posts

すべての postst が 1 つのクエリで取得され (includes のおかげで)、サブカテゴリと投稿を反復処理します。

于 2013-03-15T11:37:08.200 に答える