我有Area
模型,User
模型看起来像这样:
区域型号:
Nothing!!!
用户模型:
belongs_to :area, foreign_key: :area_id
现在,我可以通过Area.find(1).users
但是,我怎样才能获得所有拥有1到10个用户的区域,或者所有拥有20到30个用户的区域?
答案 0 :(得分:1)
您可以使用having子句来实现
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之间
注意:您可以根据您的要求更改范围
答案 1 :(得分:1)
使用rails 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
现在无论何时将user
与area
对象关联/删除,rails都会自动增加或减少users_count并自动将其存储在area
对象中。
您的查询将像以下查询一样简单。
Area.where(users_count: 1..10)