2017-03-07 9 views
1

私は多くのユーザーがいるプロジェクトに取り組んでおり、ユーザーには多くの投稿があります。投稿数が一定のしきい値を超えるユーザーを取得しようとしていますが、使用しているクエリが機能していないようです。'having clause'の不明な列:

私は Unknown column posts.id in 'having clause':

にこの問題を解決する方法上の任意のヘルプを取得するこのクエリを持つしかし

User.where(id: user_ids) 
     .where(has_posts: true) 
     .joins(:posts) 
     .group('users.id') 
     .having('COUNT(posts.id) >= user.post_threshold') 

をいただければ幸いです。

+0

私はエラーを取得し、これを行うには、 'グループfunction' – user2320239

+0

の無効な使用は、このコードの最後に' .to_sql'を追加し、ここで結果を投稿してください。 – mudasobwa

+1

また、 '> = user.post_threshold'は'> = users.post_threshold'( ''ユーザーの 's'に注意してください)です。 – mudasobwa

答えて

0

少なくともPostgresではposts.*という表記を使用できますが、mysqlについてはわかりません。

User.where(id: user_ids) 
.where(has_posts: true) 
.joins(:posts) 
.group(:id) 
.having('COUNT(posts.*) >= users.post_threshold') 
0

あなたはそのためのhavingを必要としない、シンプルなwhereはよくあなたを提供します:

User. 
    where(id: user_ids). 
    where(has_posts: true). 
    where('COUNT(posts.id) >= users.post_threshold'). 
    joins(:posts). 
    group('users.id') 

編集:いくつかのデータベースでは、あなたがこれを追加し、選択して凝集を含める必要があるかもしれませんがチェーンへのライン:

.select('*, COUNT(posts.id)') 
+0

彼はグループを必要としません。私は彼がただそれを持っていることを考えていると思う。 –

+0

これは私のためには機能しませんでしたが、ユーザーではなく#を返しました – user2320239

+0

結果セットを返しました。これはRelation in Railsと呼ばれています。セット内の個々の項目はUsers:try 'result.first.class'でなければなりません。空白の場合は、その数の投稿を持つユーザーがいないことを意味します。 –

関連する問題