从集合中获取记录

Getting a record from a collection

我想从 users 集合中获取 user_5(即 ID 为 5 的用户)。

users = User.all
user_5 = ???

我知道我可以通过 user = User.find(5) 获取它,但我不想再进行查询。

有什么想法吗?

您可以使用 #find:

users = User.all
user_5 = users.find { |user| user.id == 5 }

通话中

users = User.all

不执行查询。当您尝试在 find 方法中遍历集合时执行查询调用

可能更快
users.find(5)

而不是在内存中使用 find 因为它将从数据库中获取所有记录并线性迭代它们:

users.find { |user| user.id == 5 }

此外 users.find 实际上可能调用 AR find 而不是 Enumerable#find,所以关于示例可能 return 什么都没有,使用 #detect 更安全