Ruby on rails 在activercord中选择uniq结果的简单方法

Ruby on rails 在activercord中选择uniq结果的简单方法,ruby-on-rails,activerecord,ruby-on-rails-4,request,Ruby On Rails,Activerecord,Ruby On Rails 4,Request,对于此查询,我只需要每个不同的可报告\u id的一个字段。 当存在多个相同的可报告的_id时,它应该只返回其中一个 因此,这个请求应该只返回一个字段,而不是两个 我尝试了.uniq.by:reportable_id,但它在Rails4上已经不存在了。 和。选择distinctreportable\u id仅选择可报告的\u id字段 但之后,我注意到即使它能工作,它也不会做我想做的事情 您有解决方案吗?试试这个: irb(main):070:0> Moderation::Report.al

对于此查询,我只需要每个不同的可报告\u id的一个字段。 当存在多个相同的可报告的_id时,它应该只返回其中一个

因此,这个请求应该只返回一个字段,而不是两个

我尝试了.uniq.by:reportable_id,但它在Rails4上已经不存在了。 和。选择distinctreportable\u id仅选择可报告的\u id字段

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

您有解决方案吗?

试试这个:

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">]>
它只会为每个报告id提供一条记录


希望这能对您有所帮助。

您想用可报告的\u id选择哪个字段?@sunil,我想选择Report的每个字段。uniq是一种数组方法。如果你交换它们,比如.by:reportable\u id.uniq,它会起作用吗?事实上,如果你只想返回一个结果,你不能只做一个find:first而不是find:all吗?@MaxWilliams Sunil刚刚找到了我想要的结果,无论如何谢谢;谢谢,一个小时前我已经试过了,但是因为我只有两个字段,并且只得到了一个结果,所以我认为我无法遍历它。但多亏了你,我才注意到它是难以忍受的;
 Moderation::Report.group(:reportable_id)