我有很多用户,每个用户都有多个项目。
现在,我希望每个用户只能获得一个项目。
@projects = Project.all.where(user_id是唯一的)
即使已经没有提取同一用户的其他项目,也应该获取项目。
希望我对我的问题很清楚。我在Rails 5上。
编辑:
我在制作中使用postgres。
答案 0 :(得分:0)
你可能想做这样的事情。
Users.uniq.pluck(:projects)
答案 1 :(得分:0)
有很多方法可以做到这一点。我建议将以下代码作为起点:
projects_scope = Project.where(:status => "Published")
@projects = projects_scope.where(id: projects_scope.group(:user_id).maximum(:id).values)
以下是它的工作原理:
我们按user_id
对项目进行分组,并使用maximum
选择ID最高的项目(您可以使用minimum
或从组中选择一行的其他方法)。更详细:
一个。 projects_scope.group(:user_id).maximum(:id)
将Hash
映射用户ID返回给项目ID。例如,{ 12 => 17, 14 => 3 }
表示我们为用户12
选择了项目17
,而对于用户14
,我们选择了项目3
。
湾我们只对项目ID感兴趣,因此我们通过调用Hash#values
)来获取哈希值。
了解ID后,我们在数据库中查询相应的项目,并将结果分配给@projects
。
如果您想学习一些更高级的技巧,我建议您看看this Stack Overflow question。