在我的模型中,我有用户(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中的某种错误以及它查询数据库的方式?
答案 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?