在活动记录结果数组中查找
Finding in array of active record results
我正在使用活动记录创建数组。
users = User.all.to_a
现在我想稍后在此数组中查找用户 ID:1
users.find(1)
但它没有给出结果,而是 return 一切。如何在此结果数组中搜索我选择的用户 ID。我可以看到 users 是一个 array
但在数组中有 User
对象的每个记录。
如果我执行以下操作
user.first
是return用户对象,但是我想搜索,怎么办。我知道如果我删除 to_a
那么它会起作用,但它会创建另一个 sql 查询。
因为它是一个对象数组,所以你应该使用 find
with block:
users.find { |user| user.id == 1 }
User.find(1)
是一个 ActiveRecord::FinderMethod
。但是当您已经将所有记录加载到内存中时,这些记录将转换为 User
的实例并存储在数组中。因此,您需要使用在 Array
上实现的 find
或 select
,如下所示:
users.find { |user| user.id == 1 } #=> returns the first found record
users.select { |user| user.id == 1 } #=> returns an array with all found record
请记住,如果设置得当,数据库查询可以使用高效的索引。这使得数据库查询非常快。当您将所有记录加载到内存中时,这些记录需要转换为适当的实例。并且在数组上搜索不能使用任何索引,这意味着它可能(取决于数组的大小)比新的数据库查询慢。
我正在使用活动记录创建数组。
users = User.all.to_a
现在我想稍后在此数组中查找用户 ID:1
users.find(1)
但它没有给出结果,而是 return 一切。如何在此结果数组中搜索我选择的用户 ID。我可以看到 users 是一个 array
但在数组中有 User
对象的每个记录。
如果我执行以下操作
user.first
是return用户对象,但是我想搜索,怎么办。我知道如果我删除 to_a
那么它会起作用,但它会创建另一个 sql 查询。
因为它是一个对象数组,所以你应该使用 find
with block:
users.find { |user| user.id == 1 }
User.find(1)
是一个 ActiveRecord::FinderMethod
。但是当您已经将所有记录加载到内存中时,这些记录将转换为 User
的实例并存储在数组中。因此,您需要使用在 Array
上实现的 find
或 select
,如下所示:
users.find { |user| user.id == 1 } #=> returns the first found record
users.select { |user| user.id == 1 } #=> returns an array with all found record
请记住,如果设置得当,数据库查询可以使用高效的索引。这使得数据库查询非常快。当您将所有记录加载到内存中时,这些记录需要转换为适当的实例。并且在数组上搜索不能使用任何索引,这意味着它可能(取决于数组的大小)比新的数据库查询慢。