Вытащить объекты из ассоциации в массив в Rails - PullRequest
0 голосов
/ 13 октября 2009

Пользователь 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 не собирается делать то, что мне нужно.

1 Ответ

2 голосов
/ 13 октября 2009
class User < AR::Base
  has_many :donations
  has_many :projects, :through => :donations
  …
end

@user.projects

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

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

...