在 neo4j.rb 中使用 has_many "both"

Using has_many "both" in neo4j.rb

我正在寻找一种在 User 之间建立关系的方法,您可以在其中同时使用 inoutboth时间 Neo4j.rb.

这是我目前的情况:

class User
  include Neo4j::ActiveNode

  has_many :both, :friends, type: :connection, model_class: User
  has_many :out, :following, type: :connection, model_class: User
  has_many :in, :followers, type: :connection, model_class: User
end

以下作品:

me = User.create
you = User.create

me.followers << you
me.followers.to_a
#=> [you]

you.following.to_a
#=> [me]

与上述相反的方法也适用。但这似乎不起作用:

me.friends << you
you.following.to_a
#=> []

或:

me.followers.to_a
#=> []

但是,这样做:

me.following.to_a
#=> [you]

这是预期的行为。 Neo4j 不允许您创建没有方向的关系。这样,both关联类型只是为了查询(即查询时指定关系,而不指定方向to/from节点)。

由于 Neo4j 关系总是有方向的,当您使用 both 关联创建关系时,它会将它们创建为 out 关系。请参阅文档中的此部分:

https://github.com/neo4jrb/neo4j/wiki/Neo4j-v3-Declared-Relationships#all-has_manyhas_one-method-calls-begin-with-declaration-of-direction

现在想想,我想知道也许 Neo4j.rb 不应该让你使用 both 关联来创建关系。你怎么看?我也会创建一个 Github issue