我有以下两个模型:
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
建议吗?另外,如何避免添加重复用户?由于
纯Ruby方法:
@users = Project.find(project_ids).map(&:users).flatten.uniq
SQL方法(如您所说的用户属于项目):
@users = User.where(:project_id => project_ids)
我将从遵循rails约定开始
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