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

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

假设用户 A 连接到 B,则用户 B 自动被视为连接到用户 A。

用户 has_many 连接

连接表:

id, user_id, connected_user_id


编号 ||用户名|| connected_user_id

1 || 1 || 2

2 || 3 || 1

3 || 2 || 3



预期结果:

User.find(1).connections

[< User id:2, ... >,< User id:3, ... > ]

User.find(2).connections

[< User id:1, ... >, < User id:3, ... >]

最佳答案

如果你需要一个多对多的关系,你可以设置一个 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

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

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 应该返回

[< User id:2, ... >,< User id:3, ... > ]

关于mysql - 如何使用 rails ActiveRecord 以最小的成本实现连接列表的概念?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45114625/

相关文章:

mysql - 删除带有空格的记录 - MySQL

ruby-on-rails - 基于区域设置的 Rails 路线

ruby-on-rails - ruby rails : link updates DB

ruby-on-rails - 如何使我的网络应用程序更加强大,以应对意外的流量峰值?

ruby-on-rails - 在 Rails 4 中创建当前变量

ruby-on-rails - 没有路线匹配 [POST] "/sessions/new"(rails 4 在行动)

mysql - 从连接表中选择一条记录

Python MySQL mysql.connector 使用column_names属性构建返回

ruby-on-rails - Rails 4 和 Devise 的活跃工作

mysql - 在 JPA 和 MySQL 数据库中找不到表