5

これが私のNeo4jアクティブノードです

class User
include Neo4j::ActiveNode
  has_many :out, :following, type: :following, model_class: 'User'
end

john = User.find(:name => "John")
tom = User.find(:name => "Tom")

# create following relationship john --> tom
john.following << tom
# check count
john.following.count 
#=> 1

# again create the relationship 
john.following << tom
# again check count
john.following.count
#=> 2

唯一無二の関係を築きたい。

重複を避けるために、relation cypher クエリを作成する際に create unique を使用する必要があります。

例:

MATCH (root { name: 'root' })
CREATE UNIQUE (root)-[:LOVES]-(someone)
RETURN someone

参照: http://neo4j.com/docs/stable/query-create-unique.html

Railsを使用してNeo4j.rbでこれを行うにはどうすればよいですか?

前もって感謝します..

4

2 に答える 2

6

更新と同様に、次のことができるようになりました。

単純な関係には、次を使用しますunique:true

class User
  include Neo4j::ActiveNode
  has_many :out, :following, type: :following, model_class: 'User', unique: true
end

宣言された関係については、次を使用しますcreates_unique

class Following
  include Neo4j::ActiveRel

  creates_unique

  from_class User
  to_class   User
end
于 2015-10-15T16:18:51.303 に答える
5

これは私たちが未解決の問題を抱えているものです:

https://github.com/neo4jrb/neo4j/issues/473

今のところ、Userモデルで次のようなメソッドを作成することをお勧めします。

def create_unique_follower(other)
    Neo4j::Query.match(user: {User: {neo_id: self.neo_id}})
                .match(other: {User: {neo_id: other.neo_id}})
                .create_unique('user-[:following]->other').exec
end

編集:更新については、mrstifの回答を参照してください

于 2015-01-07T11:59:35.200 に答える