The issue here is that in
has_many :managers, through: :listing_managers
ActiveRecord can infer that the name of the association on the join model (:listing_managers) because it has the same name as the has_many :through
association you’re defining. That is, both listings and listing_mangers have many managers.
But that’s not the case in your other association. There, a listing_manager has_many :listings
, but a user has_many :managed_listings
. So ActiveRecord is unable to infer the name of the association on ListingManager
that it should use.
This is what the :source
option is for (see http://guides.rubyonrails.org/association_basics.html#has-many-association-reference). So the correct declaration would be:
has_many :managed_listings, through: :listing_managers, source: :listing
(p.s. you don’t actually need the :foreign_key
or :class_name
options on the other has_many :through
. You’d use those to define direct associations, and then all you need on a has_many :through
is to point to the correct association on the :through
model.)