1

これが私のNeo4jモデルです

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

user1には、次のように2つのアウトと1つのインがあります

ユーザー1 ---> ユーザー2

ユーザー1 ---> ユーザー3

ユーザー1 <--- ユーザー3

次のようにクエリすると、イン/アウトの両方が返されます

user1.followers.count #returns 3

ユーザーのインアウトを個別にクエリしたい

Neo4j.rbでこれを行うにはどうすればよいですか..

前もって感謝します。

4

1 に答える 1

4

関連付けによって一致 Cypher がどのように記述されるかが決まるため、その動作を変更するために呼び出されたときにメソッドをオーバーライドすることはできません。解決策は、さらに 2 つの関連付けを作成することです。

class User
  include Neo4j::ActiveNode
  has_many :both, :followers, type: :following, model_class: 'User'
  has_many :out,  :following, type: :following, model_class: 'User'
  has_many :in,   :followed_by, type: :following, model_class: 'User'
  end
end

# Or, to make it feel more Ruby...

class User
  include Neo4j::ActiveNode
  [[:both, :followers], [:out, :following], [:in, :followed_by]].each do |dir, assoc|
    has_many dir, assoc, type: :following, model_class: 'User'
  end
end


2.2.0 :008 >   User.followers.to_cypher
 => "MATCH (node2:`User`), (result_followers:`User`), node2-[rel1:`following`]-(result_followers:`User`)" 
2.2.0 :009 > User.following.to_cypher
 => "MATCH (node2:`User`), (result_following:`User`), node2-[rel1:`following`]->(result_following:`User`)" 
2.2.0 :010 > User.followed_by.to_cypher
 => "MATCH (node2:`User`), (result_followed_by:`User`), node2<-[rel1:`following`]-(result_followed_by:`User`)" 
于 2015-01-06T15:26:29.270 に答える