gpt4 book ai didi

ruby-on-rails - Neo4j 急切加载 ActiveRel

转载 作者:太空宇宙 更新时间:2023-11-03 16:13:33 24 4
gpt4 key购买 nike

我正在尝试获取可能仅与特定用户相关的特定关键字并返回关系。

Keyword.where(text: ['key1', 'key2'])
.tagged_users(:u, :rel)
.where(uid: [100, 101])
.pluck(:rel).each_with_object({}) do |rel, obj|
uid = rel.to_node.uid
keyword = rel.from_node.text
obj[uid] ? obj[uid] << keyword : obj[uid] = [keyword]
end

假设我们与用关键字“key2”标记的用户 100 只有一个关系,所需的结果是 { 100 => ['key2'] }

上面的代码可以工作,但是对于每个 rel,它都对数据库执行 2 次查询;一个用于 rel.to_node,一个用于 rel.from_node

我希望有一种解决方案可以“预先加载”rel.from_noderel.to_node,这样整个代码段只会执行一个查询。

(另一种解决方案是针对每个关键字运行并获取其标记的用户,但这也需要很多查询。)

最佳答案

解决方案是添加 with_associations 所以我们甚至不需要关系对象。

def self.uids_to_keywords(keywords, user_ids)
Keyword.where(text: keywords).tagged_users.with_associations(:keywords)
.where(user_id: user_ids).each_with_object({}) do |user, obj|
obj[user.user_id] = keywords & user.keywords.map(&:text)
end
end

关于ruby-on-rails - Neo4j 急切加载 ActiveRel,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54131959/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com