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)、<> ? 和其他一些排列方式。结果是一样的。

更新

我最终将 user_id 的默认值设为“1”而不是 NULL。一旦我这样做了,上面的代码就可以正常工作了。我想我的失败是不了解 nil(?) 的属性

4

1 回答 1

0

你有没有尝试过:

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

或(导轨 4)

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

和(轨道 3)

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

... 是的

于 2013-10-16T05:31:08.117 回答