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

时间:2015-05-14 19:11:45

标签: neo4j

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

> 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多条记录。

在DB中,关系名称为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

任何线索为什么关系不再有效?

1 个答案:

答案 0 :(得分:1)

关联现在返回AssociationProxy个对象。在过去,他们返回了QueryProxy个对象。两者都允许您对其他关联或其他类级别方法进行链式调用。像这样:

# 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