#<Neo4j::Core::Node:xxxxxxxx> 的未定义方法 `rels`

undefined method `rels` for #<Neo4j::Core::Node:xxxxxxxx>

最近我升级到了 Neo4j 3.1.3、Neo4j.rb 8.0.13 和 Neo4j-core 7.1.2。此后,rels 方法抛出 undefined method 'rels' for #<Neo4j::Core::Node:xxxxxxxx> 错误。

我的查询是, student.rels(dir: :outgoing, type: :enrolled_in).count

rels方法一起,create_rel方法也不起作用。我一直在阅读文档,看看这两种方法是否已从较新的版本中弃用,但到目前为止还没有成功。

您可能想先阅读 upgrade guide,然后再阅读此答案的其余部分。

rels 关系未添加到替换旧 API 中的旧 Node 对象的 Neo4j::Core::Node 对象。我相信我们在 ActiveNode.

中也有一个 rels 方法

如果您使用的是ActiveNode,替代方法是定义一个关联。类似于:

class Student
  include Neo4j::ActiveNode

  has_many :out, :all_nodes, type: :enrolled_in, model_class: false
end

# Then you can do:
student.all_nodes.count

然而,您只关注 enrolled_in 关系这一事实让我认为这可能会转到特定节点(也许 Course?)。如果是这样,我建议这样做:

class Course
  include Neo4j::ActiveNode
end

class
  include Neo4j::ActiveNode
  has_many :out, :courses, type: :enrolled_in 
  # model_class of `Course` will be assumed based on the association's name
end

如果您不使用 ActiveNode 而是直接使用 neo4j-core gem,您应该使用 Cypher 查询