2

私は、Neo4j.rb とモデル、たとえば Auth を使用した Jruby on Rails アプリケーションを次のように定義しています。

class Auth < Neo4j::Rails::Model
  property :uid, :type => String, :index => :exact
  property :provider, :type => String, :index => :exact
  property :email, :type => String, :index => :exact
end

そして、このコード:

a = Auth.find :uid => 324, :provider => 'twitter'
# a now represents a node
a.to_json
# outputs: {"auth":{"uid": "324", "provider": "twitter", "email": "email@example.com"}}

ノードの ID が JSON 表現から欠落していることに注意してください。アプリケーション内に RESTful API があり、DELETE および UPDATE アクションを実行するには ID が必要です。

これが機能するかどうかを確認するためにこれを試しました:

a.to_json :only => [:id]

しかし、空の JSON を返します{}

メソッド全体を書き直さずに、JSON 表現でノードの ID を取得する方法はありますto_jsonか?

更新to_xml同じ問題がメソッドにも当てはまります。

ありがとうございました!

4

2 に答える 2

3

私は自分の質問に答えています。これを行うにはもっと良い方法があると思いますが、今のところ、次のハックを使用しています。

私は/config/initializers/neo4j_json_hack.rb次のコードを入れます:

class Neo4j::Rails::Model
    def as_json(options={})
        repr = super options
        repr.merge! '_nodeId' => self.id if self.persisted?
    end
end

そして今、永続化Neo4j::Rails::Modelされたオブジェクトのすべての JSON 表現に_nodeIdパラメーターがあります。

于 2012-07-24T15:35:37.007 に答える
1

ID は Neo4j データベースの外部に公開されるべきではないため、通常は含まれません。Neo4j は、ID がインスタンスごとに同一であることを保証しません。また、Neo4j の分散型エンタープライズ インストールで ID が変更されても驚かないでしょう。

独自の ID (GUID?) を作成し、それをノードのプロパティとして保存し、インデックスを付けて、それを使用してノードを参照する必要があります。Neo4j ID をユーザーやアプリケーションに公開しないでください。また、1 回のリクエストを超えてそれに依存しないでください (たとえば、別のデータベースに参照を保存したり、同等性をテストするために使用したりしないでください)。

于 2013-04-08T20:40:43.293 に答える