我有一个Project模型。 项目模型具有返回项目的所有用户的“all_users”实例方法。Rails Active将不同的关联结果记录到一个对象中
class Project < ActiveRecord::Base
has_many :memberships
has_many :users, through: :memberships, source: :member, source_type: 'User'
has_many :teams, through: :memberships, source: :member, source_type: 'Team'
scope :all_users, -> (project) {
User.where(%{
(users.id in (select member_id from memberships where project_id = #{project.id} and member_type = 'User')) OR
(users.id in (select user_id from teams_users where team_id IN (select member_id from memberships where project_id = #{project.id} and member_type = 'Team')))
})
}
def all_users
Project.all_users(self).order(:name)
end
end
用户有很多项目。
我想在User模型中创建一个实例方法来返回实例所有项目的所有用户。如:
class User < ActiveRecord::Base
has_many :memberships, as: :member, dependent: :destroy
has_many :projects, through: :memberships
def colleagues
colleagues_of_user = []
projects.each do |project|
project.all_users.each do |user|
colleagues_of_user << user
end
end
teams.each do |team|
team.projects.each do |project|
project.all_users.each do |user|
colleagues_of_user << user
end
end
end
colleagues_of_user.uniq
end
end
问题是;我想将所有“project.all_users”连接成一个对象,但我不能。我必须将它们变成一个数组(to_a)。但我想在一个对象(“ActiveRecord ::关系”)中的结果(colleagues_of_user)。
UPDATE:即应该注意的另一点是; colleagues_of_user可以是:
1.任何属于当前用户任何项目的用户。
2.任何属于当前用户团队项目成员的用户。
我已经更新了关于这些笔记的“同事”方法。如何将所有结果合并到一个ActiveRecord :: Relation对象中? (非数组)
感谢。我更新了这个问题,还有一点。 –