在activerecord中选择唯一结果的简单方法

时间:2014-02-05 12:09:54

标签: ruby-on-rails activerecord ruby-on-rails-4 request

irb(main):070:0> Moderation::Report.all.where(reportable_type: 'Message')
  Moderation::Report Load (0.6ms)  SELECT "reports".* FROM "reports" WHERE "reports"."reportable_type" = 'Message'
=> #<ActiveRecord::Relation [#<Moderation::Report id: 1, reason: "Insults", status: "Pending", reportable_id: 1, reportable_type: "Message", user_id: 1, ban_id: nil, created_at: "2014-02-05 11:12:29", updated_at: "2014-02-05 11:23:03">, #<Moderation::Report id: 2, reason: "spam", status: "pending", reportable_id: 1, reportable_type: "Message", user_id: nil, ban_id: nil, created_at: "2014-02-05 11:40:45", updated_at: "2014-02-05 11:40:45">]>

我希望此查询只有每个不同reportable_id的一个字段。 当有多个相同的reportable_id时,它应该只返回其中一个。

因此,此请求应仅返回一个字段而不是两个字段。

我尝试了.uniq.by(:reportable_id),但它在Rails 4上不再存在了。 并且.select("DISTINCT(reportable_id)")仅选择reportable_id字段

但之后,我注意到即使它会起作用,也不会做我想做的事情

你有解决方案吗?

1 个答案:

答案 0 :(得分:1)

试试这个:

 Moderation::Report.group(:reportable_id)

它将为每个reporatble_id唯一地提供一条记录。

希望这会对你有所帮助。