Rails - Как построить массив пользователей - PullRequest
0 голосов
/ 16 апреля 2011

У меня есть следующие 2 модели:

Projects, has_many projects
Users belong_to Projects

@project = Project.find(1)
@project.users --- outputs a lot of users

То, что я хочу сделать, это следующее: учитывая список, скажем, 3 проекта (1,4,11), итерации по каждому проектупользователи и создать объект со всеми пользователями в трех проектах, сначала объединяя, но не дублируя.

Вот то, что у меня есть, но оно работает неправильно:

  @aggregate_users = Array.new


  params[:project_list].split(/, ?/).each do |project|
      @project_temp = Project.find(project)
      @project_temp.users.each do |user|
        @aggregate_users << user
      end
  end

Предложения?Кроме того, как избежать дублирования пользователей от добавления?Спасибо

Ответы [ 2 ]

5 голосов
/ 16 апреля 2011

Чистый Рубиновый подход:

@users = Project.find(project_ids).map(&:users).flatten.uniq

Подход SQL (как вы говорите, пользователь относится к проекту ):

@users = User.where(:project_id => project_ids)
0 голосов
/ 16 апреля 2011

Я бы начал с соблюдения правил рельсов

  class Project < ActiveRecord::Base
        has_many :users
  end

  class User < ActiveRecord::Base
        belongs_to :project
  end

Далее, допустим, у вас есть @projects, который содержит три упомянутых вами проекта (или больше)

  @needed_users = Array.new

  @projects.each do |project|
     project.users.each do |user|
        if !@needed_users.includes?(user)
           @needed_users.push(user)
        end
     end
  end
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...