includes and has_many :through associations

I’ve been trying to mentally absorb how includes and associations work when trying to query a has_many :through association.

My understanding at this point:

The symbol in the includes() is the same as the association name on whatever model you have. For example:

class Account < ActiveRecord::Base
  has_many :account_destinations
  has_many :destinations, through: :account_destinations

class AccountDestination < ActiveRecord::Base
  has_one :destination
  # has an active_destination attribute

class Destination < ActiveRecord::Base
  # has several attributes that we might want to use to filter account_destinations on

The association used in includes for account_destinations.includes is :destination, because AccountDestination has_one :destination. Meanwhile, in the where clause, the hash key for specifying what values to match in Destination refers to the table name, or destinations.

class Account
  def some_method
      .not(destinations: { name: %w(some list of names) } )

%d bloggers like this: