#ruby-on-rails #activerecord #rails-activerecord
#ruby-on-rails #activerecord #rails-activerecord
Вопрос:
У меня есть модели:
Task
который has_many :comments
и has_many :checklists
Comment
который has_many :activities
Checklist
который has_many :activities
-> (полиморфная ассоциация).
Я хочу получить все, что Activity
есть в Task
, например, если я сделаю что-то вроде:
Task.first.checklists.first.activities
он возвращает результат, так же как и:
Task.first.comments.first.activities`
но мне не удается написать правильный синтаксис, который обеспечивает выполнение каждого действия в задаче, заранее благодарю вас.
Ответ №1:
Вы можете определить has_many
through:
ассоциации:
class Task
has_many :comments
has_many :checklists
has_many :comment_activities, through: :comments, source: :activities
has_many :checklist_activities, through: :checklists, source: :activities
end
и использовать их следующим образом:
Task.first.checklist_activities
Task.first.comment_activities
Комментарии:
1.
has_many :activities, through: :comments
. Вы должны использоватьsource:
опцию, если хотите присвоить ей псевдоним.