ActiveRecord发现“尽力而为”的结果?

时间:2013-04-23 23:37:30

标签: ruby-on-rails activerecord

所以我有很多用户存储在Redis记分牌风格的东西中。但是,有时这些用户会被删除,并且不会在Redis中删除它们。这对我的应用来说并不重要,所以我不介意。但是,Rails在尝试使用类似的查询获取结果时:

User.find([1,2,3,4,244])

Rails无法找到其中一个用户,因此它返回了这个非常有用的错误:

ActiveRecord::RecordNotFound: Couldn't find all Users with IDs (1, 2, 3, 4, 244) (found 4 results, but was looking for 5)

(感谢人为可读错误!)

我想知道,有没有办法尽最大努力找到该数组中存在的所有结果,而不关心是否所有结果都没有返回?

2 个答案:

答案 0 :(得分:2)

如果您改用where,那么您会很好:

User.where(id: [1, 2, 3, 4, 244])

Rails会在SQL中将其转换为"id" IN (1, 2, 3, 4, 244),这与您的find语句执行的sql完全相同,但Rails不需要使用{{1}返回确切的记录数},与where不同。

答案 1 :(得分:1)

使用SQL in命令。这将返回数据库中的所有现有值,并忽略其他值。

User.where('id in ?', [1,2,3,4,244])
User.where(id => [1, 2, 3, 4, 244])