Ruby on Rails:#any?返回错误的值

时间:2015-12-28 15:21:03

标签: sql ruby-on-rails ruby

在我的模型中,我有用户(User)和故事(Story),关系为:user has_many stories

我发现我的外壳中有一些奇怪的东西:

(dev) user.stories.any?
=> true

(dev) user.stories
  Story Load (1.6ms)  SELECT "stories".* FROM "stories" WHERE "stories"."user_id" = 703  ORDER BY created_at ASC  [["user_id", 703]]
=> []

(dev) user.stories.any?
=> false

这是如何工作的?这是由于我的代码,还是Rails中的某种错误以及它查询数据库的方式?

1 个答案:

答案 0 :(得分:0)

我找到的解决方法(感谢@ house9)是使用:

user.stories.to_a.any?
user.stories.to_a.empty? # also works with empty?

这样,Rails就被迫进行查询。并且开销非常低,因为多次执行to_a.any?只会进行一次查询。

更好,正如@Jordan建议的那样,使用:

user.stories.exists?