在 neo4j.rb 中使用 has_many "both"
Using has_many "both" in neo4j.rb
我正在寻找一种在 User
之间建立关系的方法,您可以在其中同时使用 in
、out
和 both
时间 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
关系。请参阅文档中的此部分:
现在想想,我想知道也许 Neo4j.rb 不应该让你使用 both
关联来创建关系。你怎么看?我也会创建一个 Github issue
我正在寻找一种在 User
之间建立关系的方法,您可以在其中同时使用 in
、out
和 both
时间 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
关系。请参阅文档中的此部分:
现在想想,我想知道也许 Neo4j.rb 不应该让你使用 both
关联来创建关系。你怎么看?我也会创建一个 Github issue