Rails:如果创建者是唯一的,如何显示项目?

时间:2016-12-28 12:27:28

标签: ruby-on-rails postgresql rails-activerecord

我有很多用户,每个用户都有多个项目。

现在,我希望每个用户只能获得一个项目。

@projects = Project.all.where(user_id是唯一的)

即使已经没有提取同一用户的其他项目,也应该获取项目。

希望我对我的问题很清楚。我在Rails 5上。

编辑:

我在制作中使用postgres。

2 个答案:

答案 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)

以下是它的工作原理:

  1. 我们将使用已发布项目的范围两次,因此我们将其分配给变量以使其更具可读性。
  2. 我们按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)来获取哈希值。

  3. 了解ID后,我们在数据库中查询相应的项目,并将结果分配给@projects

  4. 如果您想学习一些更高级的技巧,我建议您看看this Stack Overflow question