Use has:_many :through
class MatchedConnection # This is your Join Table, now as a real Model. The Table also now should have an primary key "id" column
belongs_to: matching_connection, :class_name => "Connection", :foreign_key => "match_id" belongs_to: requesting_connnection, :class_name => "Connection", :foreign_key => "request_id"
end
class Connection
# a Request connection has these associations to its corresponding matches: has_many :match_connections, :class_name => "MatchedConnection", foreign_key => "request_id" has_many :matches, :through => :match_connections, :class_name => "Connection" :foreign_key => "match_id"
# a Match connection has these associations to its corresponding requests: has_many :requested_connections, :class_name => "MatchedConnection", :foreign_key => "match_id" has_many :requests, :through => :request_connections, :class_name => "Connection" :foreign_key => "request_id" end
Explanation:
From a connection on the Match side to the request side:
->(match_id ) request_connections (request_id) -> requests
From a connection on the request side to the Match side:
->(request_id ) request_connections (match_id) -> requests
As the join Table now is a real model, you can access the join items: @Con = Connection.find(1) @con.match_connections.destroy_all
don't let the names of the associations i used confuse you, i don't know exactly what your Models should do, so the naming could be a little inconvinient.