2

にいくつかのサブカテゴリ( )があるCategoryモデルがあります。subを持たないすべてのsを提供するスコープが必要です。categorycategory.categoriesCategorycategories

言い換えれば、私は書くことができます

without_subcategories = Category.select{|category| category.categories.none?}

しかし、私はこれをとして書きたいと思いscopeます。どうすればよいですか?

はっきりしない場合は、これが私のモデルです。

class Category < ActiveRecord::Base
  belongs_to :parent, class_name: 'Category'
  has_many :categories, foreign_key: :parent_id, class_name: 'Category'
  scope :without_subcategories, lambda { WHAT GOES IN HERE? }
end
4

1 に答える 1

4

ベスト プラクティスは、カウンター キャッシュを実装してデータベース クエリを最小限に抑えることです。:counter_cache => trueRailsでは、belongs_to 関連付けにオプションを追加することで、これは非常に簡単です。'categories_count'これは、カテゴリ db テーブルに整数列を作成することを前提としています。これを考えると、あなたの範囲は簡単です。

class Category < ActiveRecord::Base
  belongs_to :parent, class_name: 'Category', :counter_cache => true
  has_many :categories, foreign_key: :parent_id, class_name: 'Category'
  scope :without_subcategories, where(categories_count: 0)
end

これが役に立ったことを願っています。

于 2012-06-03T01:48:02.663 に答える