我想要一个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 sooper天才想要解决这个问题? : - )
答案 0 :(得分:1)
我就是这样做的,但不幸的是在旧版本的Rails中。也许在更新的版本中有更好的方法。
User.find(:all,
:include => :email_sessions,
:conditions => 'email_sessions.id IS NULL'
)
编辑:使用ARel:
User.includes(:email_sessions).where('email_sessions.id IS NULL')
答案 1 :(得分:0)
[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