0

私はRubyに次のコードを持っています:

Comment.select("comments.*, COALESCE(SUM(votes.value), 0) AS rating,
  user_votes.value AS user_value").
  joins("LEFT JOIN votes ON votes.voteable_type = '"+type+"' AND votes.voteable_id = comments.id").
  joins("LEFT JOIN votes AS user_votes ON user_votes.voteable_type = '"+type+"' AND user_votes.voteable_id = comments.id AND user_votes.user_id = #{user_id}").
  where(conditions).group("comments.id").order("comments."+method).limit(limit).offset(offset)

RailsがこのSQLクエリを生成するとき、完全なselectステートメントは含まれていません。

SELECT COUNT(*) AS count_all, comments.id AS comments_id FROM `comments`
LEFT JOIN votes ON votes.voteable_type = 'reply' AND votes.voteable_id = comments.id 
LEFT JOIN votes AS user_votes ON user_votes.voteable_type = 'reply' AND 
user_votes.voteable_id = comments.id AND user_votes.user_id = 1 WHERE (commentable_id = 
1 AND commentable_type = 'Impression')
GROUP BY comments.id ORDER BY comments.rating DESC LIMIT 10 OFFSET 0

ただし、groupステートメントを削除すると、完全なselectステートメントが適切に含まれます。どうしたの?

4

1 に答える 1

1

selectステートメントのselectcomments。*がgroupby( "comments.id")と競合しています。

選択するすべての列は、GROUP BY句に含まれているか、集計関数に含まれている必要があります。

SQLServerにSQLのエラーが表示されます:tt_countrycgroupからc.nameでc。*を選択します

列'tt_country.country_id'は、集計関数またはGROUP BY句のいずれにも含まれていないため、選択リストでは無効です。

ActiveRecordとarelは、指定されたselectがあいまい/無効であるため、それをスローします。

于 2013-08-08T22:18:00.010 に答える