我正试图弄清楚如何使用ActiveRecord生成某个查询。
我有以下型号
class Activity < ActiveRecord::Base
attr_accessible :limit, ...
has_many :employees
end
class User < ActiveRecord::Base
belongs_to :activity
end
每个活动都有一个限制,也就是说,一个整数属性包含可能属于它的最大用户数。
我正在寻找一种方法来选择所有可用点的活动,即用户数小于该限制的地方。
有什么想法吗?
由于
答案 0 :(得分:2)
我认为目标的SQL语法是:
select *
from activities
where activities.limit > (
select count(*)
from users
where users.activity_id = activities.id)
在Rails中说话......
Activity.where("activities.limit > (select count(*) from users where users.activity_id = activities.id)")
不确定列名“限制”是否会给您带来问题,因为它是一个保留字。您可能必须在SQL中引用它。
我还会认真考虑活动表上的用户的计数器缓存,这会使这个表现更好。某些数据库仅支持用户计数器缓存的行的部分索引。限制。
答案 1 :(得分:1)
Activity.all.select{|activity| activity.users.length < activity.limit }