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")