选项' rel_length'在Neo4j.rb中没有正常工作

时间:2018-03-06 19:06:21

标签: ruby-on-rails neo4j neo4j.rb

它的问题类似于this question,但在我的情况下,&neo4j-core' gem版本从7.0.4更新到8.1.0,并且' neo4j' 8.0.7 - > 8.3.4

class Person
  include Neo4j::ActiveNode
  has_one :out, :ancestor, rel_class: :HasFather
end

class HasFather
  include Neo4j::ActiveRel
  from_class :Person
  to_class :Person
  type 'HAS_FATHER'
end

有'显示'我有代码的方法

@ancestors = @person.ancestor(rel_length: 1..4)

在更新之前它完美地工作并且方法返回了一个包含4个人的数组。但现在它只返回一个人。

Person#ancestor 
  MATCH (previous:`Person`)
  WHERE (ID(previous) = {ID_previous})
  OPTIONAL MATCH (previous)-[rel1:`HAS_FATHER`]->(next:`Person`)
  RETURN 
    ID(previous), 
    collect(next) | {:ID_previous=>38}
ETHON: performed EASY effective_url=http://localhost:7474/db/data/transaction/commit response_code=200 return_code=ok total_time=0.01983900000000005

@ancestors = #<AssociationProxy Person#ancestor [#<Person uuid: "f4454bcb-ffc8-4050-a486-0e7172ea864a", generation: nil, name...

2 个答案:

答案 0 :(得分:0)

该密码查询未显示可变长度关系。假设previous只有一个父亲,那么您最多只能在一个节点上进行收集。

您可能需要查看syntax for variable-length patterns

OPTIONAL MATCH (previous)-[rel1:`HAS_FATHER`*..4]->(next:`Person`)

答案 1 :(得分:0)

我正在研究这个,但我很好奇当你这样做时会发生什么:

@ancestors = @person.ancestor(nil, nil, rel_length: 1..4)

我在8.1.5和8.2.1之间看the difference,它似乎主要在with_associations附近。我非常确定rel_length在8.2.x之后仍然可以正常工作,但是如果那行代码不起作用那么我可能错了......