活动记录按关联记录数查找



我想要一个 ActiveRecord 查询,它让我返回所有email_sessions为零的用户。这是我的模型:

class User
    has_many :email_sessions
end
class EmailSession
    belongs_to :user
end

在 AR 查询之后执行此操作非常简单,如下所示:

User.all.reject {|u| u.email_sessions.count > 0}

但是,当它通过每个用户检查计数时,它的计算成本非常高。我还想在此之后使用 arel 将不同的 where 语句链接在一起。

任何ActiveRecord的天才都想对此进行破解吗?:-)

这就是我会这样做的方式,但不幸的是,在旧版本的 Rails 中。也许在较新版本中有更好的方法可以做到这一点。

User.find(:all,
  :include => :email_sessions,
  :conditions => 'email_sessions.id IS NULL'
)

编辑:使用ARel:

User.includes(:email_sessions).where('email_sessions.id IS NULL')
[64] pry(main)> User.all.reject {|u| u.trial_end_date == nil or u.email_sessions.count > 0}.count
=> 138
[65] pry(main)> User.where("users.id NOT IN(?) AND users.trial_end_date IS NOT NULL", EmailSession.group(:user_id).select(:user_id).map { |es| es.user_id }).count
=> 138

相关内容

  • 没有找到相关文章

最新更新