Rails-通过属性在活动记录关联中找到对象,而无需发出更多查询

时间:2018-08-16 12:26:50

标签: ruby-on-rails postgresql activerecord

一个简短的问题,我觉得答案必须已经在StackOverflow上,但是我找不到它。

我有一些输入参数。它们每个都有一个唯一的ID。

我查询数据库,并使用类似以下内容的活动记录关联:

existing_things = current_user.things.where(uuid: [param_uuids])

这给了我这些对象的活动记录关联。

但是,我以后要做的事情是这样的:

existing_things.where(uuid: some_specific_uuid)

当然,当我运行上述查询时,它会发出一条SQL语句。

我想做的是在预加载的Active Record对象数组中找到一个对象,然后在不发出另一个查询的情况下返回该对象。

我应该怎么做?

1 个答案:

答案 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