Ruby on rails 通过关系获取的唯一记录

Ruby on rails 通过关系获取的唯一记录,ruby-on-rails,model,associations,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 即使我这样做了 tale.value_ids 同样的情况也会发生。 我知道这个故事首先得到的是相关的道德观,以及每一个道德观的相关价值观。因此,重复ID。通过配置而不是在返回的数组上使用.uniq

我有以下型号

class Tale < ActiveRecord::Base
has_many :tale_moral_joins
has_many :morals, through: :tale_moral_joins
has_many :values, through: :morals
即使我这样做了

tale.value_ids 
同样的情况也会发生。 我知道这个故事首先得到的是相关的道德观,以及每一个道德观的相关价值观。因此,重复ID。通过配置而不是在返回的数组上使用.uniq,可以做什么

比如说

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

这将返回=>[1,2,3,4]

,这将完成以下任务:

tale = Tale.first
tale.values.group(:id).pluck(:id)
记录将由数据库引擎过滤,而不是由Ruby解释器过滤。在大多数情况下,这是最好的。

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

您还可以将
Pull
的“不同id”
一起使用:

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

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