繁体   English   中英

Rails:仅当创建者是唯一的时,才如何显示项目?

[英]Rails: How to show items only if creator is unique?

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

现在,我只希望每个用户获得一件商品。

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

仅当尚未从同一用户获取任何其他项目时,才应获取该项目。

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

编辑:

我在生产中使用了postgres。

您可能想做这样的事情。

Users.uniq.pluck(:projects)

您可以通过多种方式进行操作。 我建议以下代码作为起点:

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)返回将用户ID映射到项目ID的Hash 例如{ 12 => 17, 14 => 3 }表示对于用户12我们选择项目17 ,对于用户14我们选择项目3 b。 我们仅对项目ID感兴趣,因此我们可以通过调用Hash#values获取哈希中的Hash#values

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

如果您想学习一些更高级的技术,建议您看一下这个Stack Overflow问题

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM