我完全被难住了。我正在尝试显示不属于当前用户的对象。看起来像这样:
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(?) 的属性