Neo4j - 在 ROR 类 定义中包含类型后关系不起作用

Neo4j - relationships not working after including type in ROR classes definition

我正在获取作者,但不再检索属于作者的所有艺术作品。

> a = Author.find_by(author_name: 'Camus, Albert')
=> #<Author author_id: 615454, author_name: "Camus, Albert">

> w = a.wokas
=> <AssociationProxy @query_proxy=<QueryProxy Author#wokas#wokas CYPHER: "MATCH author615452, author615452-[rel1:`authored`]->(result_wokas:`Woka`) WHERE (ID(author615452) = {ID_author615452})">>

> w.count
=> 0

我应该有 300 多条记录。

在数据库中,关系的名称是 AUTHORED,类 定义是:

class Author
  include Neo4j::ActiveNode
  property :author_name,  type: String
  property :author_id,    type: Integer
  has_many :out, :wokas, type: 'authored'
end

class Woka
  include Neo4j::ActiveNode
  property :author_id,    type: Integer
  property :publisher_id, type: Integer
  property :language_id,  type: Integer
  property :woka_id,      type: String #Integer
  property :woka_title,   type: String
  has_one :in, :author,     type: 'authored'
  has_one :in, :publisher,  type: 'published'
  has_one :in, :language,   type: 'used'
  has_many :out, :bisacs,       type: 'included'
  has_many :out, :descriptions, type: 'has_language'
end

任何关系不再有效的线索?

协会return AssociationProxy 现在对象。过去他们 returned QueryProxy 对象。两者都允许您对进一步的关联或其他 class 级方法进行链式调用。像这样:

# Returns another `AssociationProxy` which you can use to get all of the description objects
a.wokas.descriptions 

如果您想查看关联中的对象,您可以像这样对结果调用 to_a

w = a.wokas.to_a

或者您可以简单地迭代,因为 AssociationProxy 个对象是 Enumerable:

a.wokas.each do |woka|
  # Do something with the woka object
end

作为旁注,AssociationProxy 存在的原因之一是允许预先加载 described here(同样,该文档要到 5.0 的最终版本才能完成).

最后,出于性能原因,我建议尽可能使用符号。例如,对于您的协会,您可以这样做:

has_many :out, :wokas, type: :authored