我有以下两种型号:
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
连连呢?另外,如何避免添加重复用户? 感谢
答案 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