Ruby 正确的设置方法";“朋友”;Neo4j.rb中的(双向关系)

Ruby 正确的设置方法";“朋友”;Neo4j.rb中的(双向关系),ruby,neo4j,neo4j.rb,Ruby,Neo4j,Neo4j.rb,在具有双向关系的用户之间创建关系的正确方法是什么 假设我有: class User include Neo4j::ActiveNode property :name, type: String property :created_at, type: DateTime property :updated_at, type: DateTime has_many :both, :friends, model_class: 'User', type: 'connection'

在具有双向关系的
用户之间创建关系的正确方法是什么

假设我有:

class User
  include Neo4j::ActiveNode

  property :name,   type: String
  property :created_at, type: DateTime
  property :updated_at, type: DateTime

  has_many :both, :friends, model_class: 'User', type: 'connection' unique: true
  has_many :in, :followers, model_class: 'User', type: 'connection', unique: true
  has_many :out, :following, model_class: 'User', type: 'connection', unique: true
end
然后呢,

users = [
  User.create(name: 'Foo'),
  User.create(name: 'Bar'),
  User.create(name: 'Baz'),
]
这样做合适吗?它似乎效率极低:

users.each do |user|
  user.friends << users.reject { |u| u == user }
end
users.each do | user|

user.friends如果要确保
user.friends
返回其他两个用户,我实际上会这样做:

users.each do |user|
  other_users = users.reject { |u| u == user || user.friends.include?(u) }
  user.friends << other_users
end
users.each do | user|
其他用户=users.reject{| u | u==user | | user.friends.include?(u)}

user.friends我很困惑,为什么你要在
用户上迭代两次?另外,你为什么要使用
@BrianUnderwood,这是一个糟糕的尝试,无法确保用户与自己没有关系。你有没有更好的方法来实现这一点?哦,我明白了,我知道你在和每个人建立关系。谢谢!拥有重复的关系是否会带来巨大的成本?创建“跟随者”关系似乎有悖常理,因为真正的逻辑是用户必须“跟随”和“跟随”才能成为“朋友”。但事实并非如此
user.friends
省略方向:
MATCH(u)-[r:connection](其他)
。它将匹配该关系类型上的所有连接,而不考虑方向。如果存在关系,两个用户将显示为“朋友”。