2

Rails 3.2.3、rspec 2.9.0、mysql5.1 を使用しています

元のリクエストは

def index
  @votes = current_contest.votes.select('COUNT(*) AS votes_count, submission_id').group('submission_id').order('votes_count DESC')
end

開発環境ではすべて正常に動作しますが、私のテストではエラーが発生しました(ActiveRecordは追加のエイリアスを追加し、私のものを書き直します)

ActionView::Template::Error:
   Mysql2::Error: Unknown column 'votes_count' in 'order clause': SELECT COUNT(*) AS count_all, submission_id AS submission_id FROM `votes` INNER JOIN `invitations` ON `votes`.`invitation_id` = `invitations`.`id` WHERE `invitations`.`contest_id` = 1 AND (`invitations`.`status` = 'used') GROUP BY submission_id ORDER BY votes_count DESC

このような単純なクエリでこのエラーをキャッチできます

def index    
  @votes = Vote.select('COUNT(*) AS votes_count, submission_id')
end

ログ出力は

SELECT COUNT(*) FROM `votes`

しかし!!!私が行った場合

def index    
  @votes = Vote.select('COUNT(*) AS votes_count, submission_id')
  @votes.inspect # or something else calling @votes
end

コンソール ログで正しい SQL クエリを取得しました

SELECT COUNT(*) AS votes_count, submission_id FROM `votes`
4

1 に答える 1

1

私は、あなたは次のようなものを呼び出すと思います

if @votes.any?

あなたの見解で。

メソッドany?は、テーブル内のレコードをカウントします。たとえば、Vote.any?次のようなものが生成されます。

SELECT COUNT(*) AS count_all FROM `votes`;

あなたの場合、 yourCOUNT(*) AS votes_countは に置き換えられますがCOUNT(*) AS count_all、エイリアスvotes_countは order 句に残されます。

SELECT COUNT(*) AS count_all, submission_id AS submission_id FROM `votes` 
  INNER JOIN `invitations` ON `votes`.`invitation_id` = `invitations`.`id` 
WHERE `invitations`.`contest_id` = 1 AND (`invitations`.`status` = 'used') 
GROUP BY submission_id 
ORDER BY votes_count DESC
于 2012-07-17T10:02:01.260 に答える