通过关系获取唯一记录

时间:2015-08-10 14:51:38

标签: ruby-on-rails model associations

我有以下模特

class Tale < ActiveRecord::Base
has_many :tale_moral_joins
has_many :morals, through: :tale_moral_joins
has_many :values, through: :morals

以下代码返回重复的ID。我知道为什么,但我想知道如何改变它,只获得uniqs

tale = Tale.first
tale.association(:values).ids_reader # => [1,2,2,3,3,4]

即使我这样做

tale.value_ids 

同样的事情发生了。 我知道这个故事首先得到了相关的道德,并为他们每个人提供了相关的价值观。因此重复ids。可以通过配置而不是在返回的数组上使用.uniq来完成什么

3 个答案:

答案 0 :(得分:1)

tale.association(:值).ids_reader.uniq

例如

[1,2,2,3,3,4].uniq

这将返回=&gt; [1,2,3,4]

答案 1 :(得分:1)

您可以使用distinctSELECT唯一记录的关系(SQL使用SELECT DISTINCT):

tale.values.distinct

您还可以将pluck"DISTINCT id"

一起使用
tale.values.pluck("DISTINCT id")

这避免了不必要的GROUP BY语句,每个查询只能有一个语句。

答案 2 :(得分:0)

应该这样做:

tale = Tale.first
tale.values.group(:id).pluck(:id)

记录将由数据库引擎过滤,而不是Ruby解释器。在大多数情况下,这是更可取的。