【发布时间】:2017-02-21 16:03:34
【问题描述】:
给定以下模型结构;
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
您如何建议通过 Client 报告重复的潜在客户?
现在我正在用扁平化和计数做一些非常粗糙的事情,感觉应该有一个“Ruby方式”。
理想情况下,我希望界面能够说出Client.first.duplicate_leads 或Lead.first.duplicate?。
当前(糟糕的)解决方案
@duplicate_leads = Client.all.map(&:duplicate_leads).flatten
Class Client
def duplicate_leads
leads = projects.includes(:leads).map(&:leads).flatten
grouped_leads = leads.group_by(&:email)
grouped_leads.select { |_, v| v.size > 1 }.map { |a| a[1][0] }.flatten
end
end
环境
- 导轨 5
- Ruby 2.3.1
【问题讨论】:
-
这里很酷的解决方案正好适合您的需求! stackoverflow.com/questions/21669202/…
-
感谢@bkunzi01,但这是针对一个表中的多个列,而不是跨多个表。
标签: ruby-on-rails ruby activerecord