Neo4j渴望加载ActiveRel

时间:2019-01-10 15:30:45

标签: ruby-on-rails ruby neo4j neo4jrb

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

1.{"message":"dist/di.code-validation.core_issues.json does not exist or is not a file"}
2.HTTP Status 404 - Application 'flpnwc' not found in account 'p----------trial'

假设我们与用关键字'key2'标记的用户100只有一种关系,则期望的结果是{100 => ['key2']}

上面的代码有效,但是对于每个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 ,它都会对数据库执行2个查询;一个用于rel,另一个用于rel.to_node

我希望有一个解决方案,可以“紧急加载” rel.from_noderel.from_node,因此对于整个摘要仅执行一个查询。

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

1 个答案:

答案 0 :(得分:1)

解决方案是添加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