Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails 在Rails 5中,在has_和Owns_和Owns关系中显示重复记录的最佳方式是什么_Ruby On Rails_Ruby_Activerecord - Fatal编程技术网

Ruby on rails 在Rails 5中,在has_和Owns_和Owns关系中显示重复记录的最佳方式是什么

Ruby on rails 在Rails 5中,在has_和Owns_和Owns关系中显示重复记录的最佳方式是什么,ruby-on-rails,ruby,activerecord,Ruby On Rails,Ruby,Activerecord,给定以下模型结构 class Project < ApplicationRecord has_many :leads has_and_belonds_to_many :clients end class Lead < ApplicationRecord belongs_to :project end class Client < ApplicationRecord has_and_belongs_to_many :projects end 环境 轨道5

给定以下模型结构

class Project < ApplicationRecord
  has_many :leads
  has_and_belonds_to_many :clients
end

class Lead < ApplicationRecord
  belongs_to :project
end

class Client < ApplicationRecord
  has_and_belongs_to_many :projects
end
环境
  • 轨道5
  • Ruby 2.3.1
    • 你可以试试这个

      class Client < ApplicationRecord
        has_and_belongs_to_many :projects
        has_many :leads, through: :projects
      
        def duplicate_leads
          duplicate_ids = leads.group(:email).having("count(email) > 1").count.keys
          Lead.where(id: duplicate_ids)
        end
      end
      
      类客户端1”)。count.key
      Lead.where(id:重复的\u id)
      结束
      结束
      
      您可以尝试创建一个从Lead到Project再到Lead的多个关联,在该关联中,您可以使用lambda根据两个记录之间的电子邮件匹配和不匹配的id动态加入。这会将两条记录都标记为重复记录——如果只想标记一条记录,则可以要求其中一条记录的id小于另一条记录的id


      一些提示:

      这里的酷解决方案正好满足您的需要!谢谢@bkunzi01,但这是针对一个表中的多个列,而不是跨多个表。
      class Client < ApplicationRecord
        has_and_belongs_to_many :projects
        has_many :leads, through: :projects
      
        def duplicate_leads
          duplicate_ids = leads.group(:email).having("count(email) > 1").count.keys
          Lead.where(id: duplicate_ids)
        end
      end