をcurrent_user`より具体的には、!ユーザ。`のための適切な構文がどのようなものですが、私はここにこの文を書いています
この場合、現在のユーザー以外は誰でもと言っています。
どのように書きますか?これはそれを行うだろう
SELECT "comments".* FROM "comments" WHERE ("comments"."user_id" = 0)
をcurrent_user`より具体的には、!ユーザ。`のための適切な構文がどのようなものですが、私はここにこの文を書いています
この場合、現在のユーザー以外は誰でもと言っています。
どのように書きますか?これはそれを行うだろう
SELECT "comments".* FROM "comments" WHERE ("comments"."user_id" = 0)
私はこれを私が与えた他の答えに書いています。
問題は、条件のハッシュが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を使います(私は信じています)。
where :commentable_id => comments.map(&:id), :user_id => "<> #{current_user.id}"
:"not #{current_user.id}
リターンを使用して
。
これはSELECT "comments"。* FROM "comments" WHERE( "comments"。 "user_id" = 0) – Trip
@Trip:更新された回答を試してください –
ありがとうございます。魅力的な作品! – Trip