如何查找具有相同子项数范围的记录(活动记录)



我有Area模型,User模型看起来像这样:

区域模型:

Nothing!!!

用户模型:

belongs_to :area, foreign_key: :area_id

现在,我可以通过Area.find(1).users获得一个区域的多个用户

但是,我如何获得所有有1到10个用户的区域,或者所有有20到30个用户的地区?

使用轨道counter_cache选项

class User < ActiveRecord::Base
belongs_to :area, foreign_key: :area_id, counter_cache: true
end

现在为区域表创建一个迁移到

create :areas do |t|
t.integer :users_count
---- Your other fields---
end

现在,无论何时将userarea对象关联/删除,rails都会自动增加或减少users_count并将其存储在area对象中。

您的查询将与以下查询一样简单。

Area.where(users_count: 1..10)

您可以利用have子句来实现

Area.joins(:users).group('users.area_id, areas.id').having("COUNT(users.id) BETWEEN 1 and 10")

这将生成

SELECT "areas".* 
FROM "areas" 
INNER JOIN "users" ON "users"."area_id" = "areas"."id" 
GROUP BY users.area_id, areas.id 
HAVING count(users.id) between 2 and 10

上述代码将返回Area记录,其中相关用户的范围在1到10之间

注意:您可以根据自己的要求更改范围

最新更新