1

所以我有一堆用户存储在 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)

(感谢 rails 的人类可读错误!)

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

4

2 回答 2

2

如果你where改用,你会很好:

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

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

于 2013-04-23T23:46:22.880 回答
1

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

User.where('id in ?', [1,2,3,4,244])
User.where(id => [1, 2, 3, 4, 244])
于 2013-04-23T23:45:25.560 回答