Neo4j - 无法从“亲子”关系中获取所有记录

时间:2015-04-17 16:13:01

标签: ruby-on-rails neo4j

以下是我的课程:

class Author
  include Neo4j::ActiveNode
  property :author_name,  type: String
  property :author_id,    type: Integer
  has_many :out, :wokas
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: Integer
  property :woka_title,   type: String
  has_one :in, :author
  has_one :in, :publisher
  has_one :in, :language
end

Woka是一个孩子"作者。

我正在从RoR执行这样的事情:

a = Author.find_by(author_name: 'Camus, Albert')
w = Woka.find_by(woka_title: 'Caligula')

第一个是正确的,只有一个作者。 第二个不是,因为很多作者都写过关于卡里古拉的文章。

以下是上述两个语句的开发日志摘录:

 [36mCYPHER[0m [33m138ms[0m MATCH (n:`Author`) WHERE (n.author_name = {n_author_name}) RETURN n LIMIT {limit_1} | {:n_author_name=>"Camus, Albert", "limit_1"=>1}

 [36mCYPHER[0m [33m126ms[0m MATCH (n:`Woka`) WHERE (n.woka_title = {n_woka_title}) RETURN n LIMIT {limit_1} | {:n_woka_title=>"Caligula", "limit_1"=>1}

为什么那些" limit_1" => 1是由gem生成的?我没有要求对结果集进行任何限制。

用cypher编写的查询返回正确的行数:31。

MATCH (w:Woka) WHERE (w.woka_title = 'Caligula') MATCH (a:Author)-[:AUTHORED]->(w:Woka) RETURN w.woka_id, w.woka_title as woka_title, a.author_name as author_name;

不知道这里有什么问题。

1 个答案:

答案 0 :(得分:1)

解释the documentation

  

find_by的行为与ActiveRecord中的行为相同,返回第一个对象   符合标准。

我认为您想要使用这些语句来获得所有可能的结果:

a = Author.all.where(author_name: 'Camus, Albert')
w = Woka.all.where(woka_title: 'Caligula')