【问题标题】:Fetching unique records for through relationship通过关系获取唯一记录
【发布时间】:2015-08-10 14:51:37
【问题描述】:

我有以下型号

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 

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

【问题讨论】:

    标签: ruby-on-rails model associations


    【解决方案1】:

    tale.association(:values).ids_reader.uniq

    例如

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

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

    【讨论】:

      【解决方案2】:

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

      tale.values.distinct
      

      您也可以将pluck"DISTINCT id" 一起使用:

      tale.values.pluck("DISTINCT id")
      

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

      【讨论】:

        【解决方案3】:

        这应该可以解决问题:

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

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

        【讨论】:

          猜你喜欢
          • 2022-01-22
          • 1970-01-01
          • 1970-01-01
          • 2011-08-16
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2023-03-28
          • 2016-02-22
          相关资源
          最近更新 更多