0

私は完全に困惑しています。現在のユーザーに属していないオブジェクトを表示しようとしています。次のようになります。

activities = Activity.where("user_id != ?", current_user.id)
@activities = activities.near(@user).all( :order => "start_date", :limit => 15)

しかし、これを行うと、データベースが user_id が NULL または他の誰かであるオブジェクトでいっぱいになっているにもかかわらず、結果が見つかりません。私のルーキーの目には、出力も問題ないように見えます。何も引っ張られない理由がわかりません。

出力:

Activity Load (0.7ms)  SELECT activities.*, 3958.755864232 
* 2 * ASIN(SQRT(POWER(SIN((37.7749295 - activities.latitude) * PI() / 180 / 2), 2) + 
COS(37.7749295 * PI() / 180) * COS(activities.latitude * PI() / 180) * 
POWER(SIN((-122.4194155 - activities.longitude) * PI() / 180 / 2), 2))) AS distance, 
CAST(DEGREES(ATAN2( RADIANS(activities.longitude - -122.4194155), 
RADIANS(activities.latitude - 37.7749295))) + 360 AS decimal) % 360 AS bearing FROM 
"activities" WHERE (user_id != 34) AND (activities.latitude BETWEEN 37.4854659337783 AND 
38.0643930662217 AND activities.longitude BETWEEN -122.78562893449197 AND 
-122.05320206550803 AND 3958.755864232 * 2 * ASIN(SQRT(POWER(SIN((37.7749295 - 
activities.latitude) * PI() / 180 / 2), 2) + COS(37.7749295 * PI() / 180) * 
COS(activities.latitude * PI() / 180) * POWER(SIN((-122.4194155 - activities.longitude) * 
PI() / 180 / 2), 2))) <= 20) ORDER BY start_date, distance ASC LIMIT 15

クエリを試してみると:

activities = Activity.where('user_id IS ?', nil)

期待されるオブジェクトを取得します。current_user.id と等しくないのに結果が得られないのはなぜですか?

また、where.not(user_id: current_user.id)、<> ?、およびその他のいくつかのようなさまざまな順列を試しました。そして、結果は同じです。

更新しました

結局、NULLではなくuser_idのデフォルト値を「1」にしました。それをしたら、上記のコードはうまくいきました。私の失敗は nil(?) のプロパティを理解していないことだと思います

4

1 に答える 1

0

やってみました:

activities = Activity.where("user_id <> ?", current_user.id)

または(Rails 4)

activities = Activity.where.not(user_id: current_user.id)

そして(Rails 3)

activities = Activity.where(Activity.arel_table[:user_id].not_eq(current_user.id)

... Hは

于 2013-10-16T05:31:08.117 に答える