所以我有很多用户存储在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)
(感谢人为可读错误!)
我想知道,有没有办法尽最大努力找到该数组中存在的所有结果,而不关心是否所有结果都没有返回?
答案 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])