2

次のようなエラーが発生します

Mysql2::Error: Unknown column 'ctr' in 'having clause': SELECT COUNT(*) AS count_all, artists.id AS artists_id FROM `artists` INNER JOIN `photos` ON `photos`.`photoable_id` = `artists`.`id` AND `photos`.`photoable_type` = 'Artist' WHERE (admin_approved = 1) GROUP BY artists.id HAVING ctr >= 2

スコープを書く私のアーティストモデル

scope :approved, where("admin_approved = ?", true)
scope :completed_profile, joins(:photos).select("artists.*,count(photos.id) as ctr").group("artists.id").having("ctr >= 2")

私のコントローラーで私は書く

  def artists_completed_profile
     @artists = Artist.approved.completed_profile.page(params[:page]).per(10)
     @total_artists = @artists.size
  end 

注: コンソールで試してみるとエラーは発生しませんが、モデルまたはコントローラーに書き込むとこのエラーが発生します。

前もって感謝します

4

1 に答える 1

4

あなたのページネーションの何かが.count. それはあなたのスコープ.countの一部を無視するでしょう.select、それがあなたが見ている理由です:

SELECT COUNT(*) AS count_all, artists.id AS artists_id ...

MySQL に送信されます。あなたのctrエイリアスはあなたによって定義されて.selectいるので、.countのSQLは失敗します。ctrHAVING を使用せずに raw を使用することで、この問題を回避できるはずですcount(photos.id)

scope :completed_profile, ...having("count(photos.id) >= 2")
于 2012-11-24T05:10:40.513 に答える