一个简短的问题,我觉得答案必须已经在StackOverflow上,但是我找不到它。
我有一些输入参数。它们每个都有一个唯一的ID。
我查询数据库,并使用类似以下内容的活动记录关联:
existing_things = current_user.things.where(uuid: [param_uuids])
这给了我这些对象的活动记录关联。
但是,我以后要做的事情是这样的:
existing_things.where(uuid: some_specific_uuid)
当然,当我运行上述查询时,它会发出一条SQL语句。
我想做的是在预加载的Active Record对象数组中找到一个对象,然后在不发出另一个查询的情况下返回该对象。
我应该怎么做?
答案 0 :(得分:1)
与使用普通数组时的方式相同: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
)