以下是我的课程:
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;
不知道这里有什么问题。
答案 0 :(得分:1)
find_by的行为与ActiveRecord中的行为相同,返回第一个对象 符合标准。
我认为您想要使用这些语句来获得所有可能的结果:
a = Author.all.where(author_name: 'Camus, Albert')
w = Woka.all.where(woka_title: 'Caligula')