1

我正在使用带有 Rails 3.2.1 的 Neo4j 2.0.1。我收到一个看起来非常基本的错误,但我似乎无法解决它。我将不胜感激任何帮助!

这是我的代码片段:

rels1 = identity1.rels(:outgoing,:friends)
if !rels1.nil? and rels1.count > 0
  friendships12 = rels1.to_other(identity2)
end

其中 identity1 和 identity2 是 Neo4j::Rails::Model 子类的对象。

我得到的错误是在“friendships12 = ....”这一行上,它说

"undefined method `_other_node' for nil:NilClass"

我究竟做错了什么?最初我尝试了明显的:

friendships12 = identity1.rels(:outgoing,:friends).to_other(identity2)

这是基于 neo4j 的 rails 指南(http://neo4j.rubyforge.org/guides/basic.html,请参阅“查找两个节点之间的关系”)。但这给了我同样的错误,这就是我如上所述尝试的原因。但错误仍然存​​在。

4

2 回答 2

2

我遇到了同样的错误,我不知道原因。我通过使用 select 并寻找结束节点来解决它。

identity1.rels(:outgoing, :friends).select{|r| r.end_node == identity2}.first

此外,请确保在创建关系后保存节点。

于 2012-11-13T22:42:14.857 回答
0

你试过做'puts rels1'吗?

如果身份和关系之间存在一对多关系[我猜是],那么执行 identity1.rels 将返回一个数组。您可以通过执行 'puts rels1' 检查是否发生这种情况,如果 rels1 是一个数组,那么您需要执行 rels1.first 以获取关系对象,然后对其执行 to_other。

编辑:我浏览了http://neo4j.rubyforge.org/guides/basic.html并注意到了这一点:

node1.rels # => an *Enumerable* of all incoming and outgoing relationship of any type

这意味着你需要做类似的事情

identity1.rels(:outgoing,:friends).to_other(identity2) do |x|
# Your code that works with relation object x, here
end

本质上,您正在遍历每个关系对象。

阅读此 [http://ruby.bastardsbook.com/chapters/enumerables/] 了解更多信息。

于 2012-07-19T05:12:10.877 回答