它的问题类似于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...
答案 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之后仍然可以正常工作,但是如果那行代码不起作用那么我可能错了......