2010-12-13 6 views

答えて

3

私はこれを私が与えた他の答えに書いています。

問題は、条件のハッシュがSQLで==またはINの比較を行う場合にのみ有効であるということです。より大きいか小さい比較や不等号を行うことはできません。 SQLのスニペットを自分で作成する必要があります。それは(ARELの逸品です)SQLジェネレータに!current_userの結果をお送りしますので、

where(:commentable_id => comments.map(&:id)).where("user_id != ?", current_user.id) 

あなたのアプローチは、動作しません。 Rubyロジックによれば、nilまたはfalse以外のオブジェクトはtrueとみなされます。あなたの前に "bang"(感嘆符)を置くと、falseのようになります。そして、ARelは、falseをデータベースが誤っているものに変換しようとします。ほとんどのデータベースはブール値を理解しておらず、それらは異なる方法を使用しています。 SQLiteは't''f'を使い、MySQLは1と0を使います(私は信じています)。

+0

ありがとうございます。魅力的な作品! – Trip

2
where :commentable_id => comments.map(&:id), :user_id => "<> #{current_user.id}" 

"not #{current_user.id}リターンを使用して

+0

これはSELECT "comments"。* FROM "comments" WHERE( "comments"。 "user_id" = 0) – Trip

+0

@Trip:更新された回答を試してください –

関連する問題