1

Say utilisateur A est connecté à B, alors B utilisateur est automatiquement considéré comme lié à l'utilisateur A.Comment réaliser le concept de liste de connexion avec un coût minimal en utilisant les rails ActiveRecord?

Userhas_manyconnection

Tableau de connexion:

id, user_id, connected_user_id

Say


id || user_id|| connected_user_id

1 || 1 || 2

2 || 3 || 1

3 || 2 || 3



Résultat escompté:

User.find(1).connections

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

User.find(2).connections

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

Répondre

0

Si vous avez besoin d'un grand nombre à plusieurs, qui il semble que vous faites, vous pouvez configurer un 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 

alors de trouver toutes les connexions comme vous le souhaitez, vous pouvez créer une méthode dans votre classe 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 devrait retourner

[< id utilisateur: 2,. ..>, < Identifiant utilisateur: 3, ...>]

+0

pourquoi connecter d_user_id est pris comme référence dans la table user? – Manish

+0

@Manish vous devez ajouter une colonne connected_user_id à votre table users pour servir de référence à l'identifiant de l'autre utilisateur. J'ai mis à jour ma réponse avec des exemples de migrations pour le faire. – CChandler81

+0

Ne pensez-vous pas que ce n'est pas la bonne façon, car il va créer plusieurs entrées d'enregistrement pour plusieurs connexions pour le même utilisateur? – Manish