如何使用rails ActiveRecord以最低成本实现连接列表的概念?

时间:2017-07-15 04:52:20

标签: mysql ruby-on-rails ruby-on-rails-4 rails-activerecord rails-postgresql

假设用户A连接到B,则自动认为用户B与用户A连接。

User has_many connection

连接表:

id, user_id, connected_user_id

id || user_id|| connected_user_id

1 || 1 || 2

2 || 3 || 1

3 || 2 || 3

预期结果:

User.find(1).connections

  

并[d用户ID:2,...>,<用户ID:3,...> ]

User.find(2).connections

  

并[d用户ID:1,...>,<用户ID:3,...>]

1 个答案:

答案 0 :(得分:0)

如果你需要多对多的关系,听起来就是这样,你可以设置一个has_many through relationship

class User < ApplicationRecord
  has_many :connections
  has_many :connected_users, through: :connections
end

class Connection < ApplicationRecord
  belongs_to :user
  belongs_to :connected_user, class_name: "User"
end

然后找到您想要的所有连接,您可以在User类中创建一个方法:

def get_connections
  User.find(Connection.where(user_id: self.id).connected_user_ids + Connection.where(connected_user_id: self.id).user_ids)
end

User.find(1).get_connections应该返回

  

并[d用户ID:2,...&gt;,&lt;用户ID:3,...&gt; ]