0

email_sessionsがゼロのすべてのユーザーを返すことができる ActiveRecord クエリが必要です。ここに私のモデルがあります:

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 の天才で、これに挑戦したい人はいますか? :-)

4

2 に答える 2

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')
于 2012-11-20T21:12:47.827 に答える
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
于 2012-11-20T20:52:44.050 に答える