Rails - 如何构建用户数组

时间:2011-04-15 22:34:32

标签: ruby-on-rails ruby ruby-on-rails-3

我有以下两种型号:

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 个答案:

答案 0 :(得分:5)

纯Ruby方法:

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

SQL方法(正如您所说的用户属于项目):

@users = User.where(:project_id => project_ids)

答案 1 :(得分:0)

我首先要坚持使用rails convention

  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