我正在接受作者,但不再检索属于作者的所有艺术作品。
> 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
任何线索为什么关系不再有效?
答案 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