Rails:关于关联大小的ActiveRecord查询

时间:2013-07-25 15:33:01

标签: ruby-on-rails-3 activerecord associations

我正试图弄清楚如何使用ActiveRecord生成某个查询。

我有以下型号

class Activity < ActiveRecord::Base
  attr_accessible :limit, ...      
  has_many :employees
end

class User < ActiveRecord::Base
  belongs_to :activity
end

每个活动都有一个限制,也就是说,一个整数属性包含可能属于它的最大用户数。

我正在寻找一种方法来选择所有可用点的活动,即用户数小于该限制的地方。

有什么想法吗?

由于

2 个答案:

答案 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 }