Получить все экземпляры has_many для каждого элемента коллекции

#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: опцию, если хотите присвоить ей псевдоним.