¿Ruby on Rails obteniendo una relación de amistad de 2 vías en registro activo?

Estoy tratando de averiguar cómo hacer una relación mutua de dos vías, es decir:

user_id friend_id 1 2 2 1 

En lo anterior, el usuario 1 y el usuario 2 serían amigos si tanto user_id = 1 tiene friend_id = 2 y friend_id = 2 tiene user_id = 2 como amigo en una tabla. ¿Cómo contar todas las relaciones mutuas de 2 vías en ActiveRecord?

Lo que estás buscando es una relación has_and_belongs_to_many :

 class User < ActiveRecord::Base has_and_belongs_to_many :friends, :class_name => "User", :foreign_key => "this_user_id", :association_foreign_key => "other_user_id" end 

El ejemplo es de §4.4.2.1 .

Lea el capítulo final del tutorial de Micheal Heartl Ruby on Rails: Learn Rails by Example donde explica muy bien este tipo de ejemplos. Hay una edición online gratuita aquí.

https://www.railstutorial.org/book/following_users

Echa un vistazo al capítulo final. Espero que ayude.