1

レール3.2.1でNeo4j2.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のレールガイド(http://neo4j.rubyforge.org/guides/basic.html、「2つのノード間の関係の検索」を参照)に基づいています。しかし、それは私に同じエラーを与えました、それが私が上記のようにそれを試した理由です。しかし、エラーは解決しません。

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' を試してみましたか?

ID と関係の間に 1 対多の関係がある場合 (あると思います)、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 に答える