Насколько я помню, has_and_belongs_to_many
дает вам простую таблицу поиска, которая ссылается на две ваши модели.
Например,
Истории могут принадлежать ко многим категориям.
Категории могут иметь много историй.
Categories_Stories Table
story_id | category_id
has_many :through
дает вам третью модель, которую можно использовать для хранения различной другой информации, которая не принадлежит ни одной из исходных моделей.
Например
Человек может подписаться на множество журналов.
Журналы могут иметь много подписчиков.
Таким образом, мы можем иметь модель подписки посередине, которая дает нам таблицу, аналогичную предыдущему примеру, но с дополнительными свойствами.
Subscriptions Table
person_id | magazine_id | subscription_type | subscription_length | subscription_date
и т. Д.