首页 > 解决方案 > 如何查询 ActiveRecord 以仅返回 enum = X、Y、Z 的每个对象的第一个实例?

问题描述

我们的 CMS 有一个 Article 模型,它使用枚举来定义文章类型。

enum display_format: {
   webpage: 0, 
   blog: 1,
   interactive: 2,
   advertisement: 3,
   experience: 4, 
   product_questions: 5
} 

在我们的主页上,我显示每个类别中的最新文章,每个当前都作为单独的查询,就像这样。

Article.where(display_format: :webpage).order(:pub_date).first
Article.where(display_format: :blog).order(:pub_date).first
Article.where(display_format: :interactive).order(:pub_date).first

有没有办法在一个查询中返回这三个记录?

我可以使用Article.where(display_format: [:webpage, :blog, :interactive]).order(:pub_date)然后过滤集合来获取每个类别的第一项,但我希望在 ActiveRecord 中有更有效的方法来执行此操作。

标签: ruby-on-railsactiverecord

解决方案


如果您已按发布日期顺序对其进行排序,则可以使用.limit(n)其中 n 是您想要获得的最新文章的数量。

您还可以使用.first(n).last(n)根据您获得所有结果的方式,它们将返回n许多文章。


推荐阅读