我有以下模特
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来完成什么
答案 0 :(得分:1)
tale.association(:值).ids_reader.uniq
例如
[1,2,2,3,3,4].uniq
这将返回=&gt; [1,2,3,4]
答案 1 :(得分:1)
您可以使用distinct
与SELECT
唯一记录的关系(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解释器。在大多数情况下,这是更可取的。