how do you access the :through join model objects?

Avram Dorfman wrote:

I have some confusion regarding how access the join model object that is responsible for a relationship I am working with. Here's a simple case:

class A < ActiveRecord::Base   has_many :connections   has_many :bs, :through => :connections end

class B < ActiveRecord::Base   has_many :connections   has_many :as, :through => :connections end

class Connection < ActiveRecord::Base         belongs_to :a         belongs_to :b end

Now say I've already got my hands on an A, called a, and one of it's b's. So, I can already say a.bs[b_index].attribute = value. That's great. But where is the Connection object that is tying this a to this particular b? The object must exist. Let's say I have a reference to it called c, so that I can say c.attribute = value. But how do I get that reference?

The only way I can see to do it is to find it manually via it's own class's relationship, as in a.connections.find_by_b_id(b.id). But that seems very WET (i.e. not DRY) to me; I shouldn't have to do a search for an object, that I'm essentially already using.

Usual way is:

a = A.find(:first, :conditions => '...', :include => {:connections => :b})

a.connections[b_index].attribute = value a.connections[b_index].b.attribute = value