Rails использует опцию :through
для ссылки на другую ассоциацию, которую вы уже определили. Я думаю, что это делает это, чтобы вы могли вначале аккуратно установить сложные ассоциации, не определяя их и не ссылаясь на них в одной строке.
Например, рассмотрим этот (излишне сложный) пример:
has_many :users, :class_name => 'Person', :foreign_key => 'owner_id'
has_many :tasks, :through => :users, :class_name 'Job'
Нет простого способа выразить всю эту информацию в строке.
Кроме того (не уверен, подразумеваете ли вы это в своем вопросе), вы можете напрямую получить доступ к обеим ассоциациям. Так что если пользователь has_many :tasks
и has_many :milestones, :through => :tasks
, вы можете и захотите захотеть получить доступ как к @user.tasks
, так и к @user.milestones
.
Так что это не только полезно для просмотра того, что более или менее является таблицей соединений в вашем примере (два внешних ключа, временные метки и, возможно, один или два атрибута) - у вас могут быть большие модели, на которых вы используете has_many :through
.
Помогает ли это ответить на ваш вопрос? Не уверен, сколько из этого вы уже знаете.