Потяните объекты из ассоциации в массив в Rails

Пользователь has_many :donations, проект has_many :donationsи пожертвование belongs_to :userи belongs_to :project.

Я ищу разумный способ извлечь проекты, связанные с пользователем (через пожертвования) в массив.

В настоящее время я делаю:

def index
  @user = User.find params[:user_id]
  @projects = []
  @user.donations.each do |donation|
    @projects << donation.project
  end
end

Я чувствую, что упускаю что-то очевидное, так как это кажется отстойным. Есть лучший способ сделать это?

редактировать

Я случайно упростил это слишком далеко. Пользователь также может быть связан с проектом через другие модели, поэтому @projects = @user.projectsон не собирается делать то, что мне нужно.

13.10.2009 00:41:03
1 ОТВЕТ
РЕШЕНИЕ
class User < AR::Base
  has_many :donations
  has_many :projects, :through => :donations
  
end

@user.projects

должно сработать.

Для сбора многих коллекций ассоциаций см. Мой предыдущий ответ . Вам нужно будет адаптировать его для использования сквозных ассоциаций (просто относитесь к ним как к обычному has_masnys), но то же самое применимо.

2
23.05.2017 12:19:07
Спасибо, но я забыл важную информацию - я добавил еще одно требование.
nfm 13.10.2009 00:59:57
Для записи в связанном ответе используются именованные области: api.rubyonrails.org/classes/ActiveRecord/NamedScope/…
nfm 29.12.2009 12:11:57