给出以下模型结构;
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
上的重复潜在客户?
现在我正在做一些非常粗糙的事情,有扁平和重要的事情,感觉应该有一种&#39; Ruby方式&#39;。
理想情况下,我希望界面能够说出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
答案 0 :(得分: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 :(得分:0)
您可以尝试创建从Lead到Project的has_many关联返回到Lead,其中您使用lambda根据两条记录之间的电子邮件匹配动态加入,并且id不匹配。这会将两个记录都标记为重复 - 如果您只想标记一个,那么您可以要求一个的id小于另一个的id。