Ruby on rails Rails范围检查是否没有关联

Ruby on rails Rails范围检查是否没有关联,ruby-on-rails,Ruby On Rails,我有一个类别模型,其中类别可能有一些子类别(类别.类别)。我想要一个范围,该范围为我提供所有没有子类别的类别 换句话说,我会写作 without_subcategories = Category.select{|category| category.categories.none?} 但是我想把它写成范围。我该怎么做 如果不清楚,这是我的模型: class Category < ActiveRecord::Base belongs_to :parent, class_name: 'C

我有一个
类别
模型,其中
类别
可能有一些子类别(
类别.类别
)。我想要一个范围,该范围为我提供所有没有子
类别的
类别

换句话说,我会写作

without_subcategories = Category.select{|category| category.categories.none?}
但是我想把它写成
范围
。我该怎么做

如果不清楚,这是我的模型:

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
类别
最佳实践是通过实现计数器缓存来最小化数据库查询。 在rails中,这是一个超级简单的方法,它将一个选项
:counter\u cache=>true
添加到“所属对象”关联中。这假设您在categories db表中创建了一个
“categories\u count”
整数列。鉴于此,您的范围很小

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
类别true
有很多:类别,外键::父项id,类名:'Category'
范围:无子类别,其中(类别计数:0)
结束

希望这有所帮助。

最佳实践是通过实现计数器缓存来最小化数据库查询。 在rails中,这是一个超级简单的方法,它将一个选项
:counter\u cache=>true
添加到“所属对象”关联中。这假设您在categories db表中创建了一个
“categories\u count”
整数列。鉴于此,您的范围很小

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
类别true
有很多:类别,外键::父项id,类名:'Category'
范围:无子类别,其中(类别计数:0)
结束

希望这能有所帮助。

我使用的是rails 3.2、activerecord和postgresql。我使用的是rails 3.2、activerecord和postgresql。在这种情况下,你甚至不需要
lambda
,只要
范围:没有子类别,其中(:categories\u count=>0)就足够了。在这种情况下,你甚至不需要
lambda
,只要
范围:没有子类别,其中(:categories\u count=>0)
就足够了。