非常简短的问题,我觉得答案一定已经在StackOverflow上了,但我找不到它。
我有一些传入的参数。它们每个都有一个唯一的 ID。
我查询数据库并使用以下内容获取活动记录关联:
existing_things = current_user.things.where(uuid: [param_uuids])
这为我提供了这些对象的活动记录关联。
但是,我后来做的是这样的:
existing_things.where(uuid: some_specific_uuid)
当然,当我运行上述查询时,它会发出一个 SQL 语句。
我想做的是在预加载的Active Record对象数组中找到一个对象,并在不发出另一个查询的情况下返回该对象。
我应该怎么做?
就像它是一个普通数组一样:Enumerable#find
.
existing_things.find { |t| t.uuid == some_specific_uuid }
(如果您期待不止一场比赛,则select
(
如果你要做很多这样的查找,你可能希望有一个哈希:
things_by_uuid = existing_things.index_by(&:uuid)
things_by_uuid[some_specific_uuid]
(同样,如果您期望每个值有多个匹配项,则group_by
(