Опция rel_length в Neo4j.rb не работает должным образом

Это похоже на этот вопрос, но в моем случае версия гема 'neo4j-core' обновлена ​​с 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 ответа

Я смотрю на это, но мне любопытно, что происходит, когда вы делаете это:

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

Я смотрю на разницу между 8.1.5 и 8.2.1, и это, кажется, в основном вокруг with_associations, я точно уверен rel_length после 8.2.x в целом все еще работает, но если эта строка кода не работает, то, возможно, я ошибаюсь в этом....

Этот запрос шифра не показывает отношение переменной длины. Если предположить, previous есть только один отец, вы всегда собираете на одном узле самое большее.

Вы можете пересмотреть синтаксис для шаблонов переменной длины:

OPTIONAL MATCH (previous)-[rel1:`HAS_FATHER`*..4]->(next:`Person`)
Другие вопросы по тегам