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
我正在获取作者,但不再检索属于作者的所有艺术作品。
> 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