ActiveRecord 通过一个查询联接来自 2 个表的数据,无需循环



我有一个公司表和一个潜在客户表。我正在提取一堆潜在客户,需要将每个潜在客户与公司表中的 2 个 ID 列结合起来。我想将公司表保留为这些 ID 的单一事实来源(因此不要将这些列添加到可能不同步的潜在客户表中(。

现在,我提取所有潜在客户并遍历每个人以添加这些数据。我假设有一种更有效的方法可以做到这一点,但我不确定如何做到这一点。有人可以帮忙吗?

leads = @user.find_leads(start_date: start_date, end_date: end_date).leads('true').includes(:company).select(fields).limit(limit).offset(offset).order("created_at DESC")
leads.each do |l|
    company = l.company.present? ? l.company.company_external_id : ""
    distributor = l.company.present? ? l.company.mfg_distributor_id : ""
    lead_data = l.attributes.merge({external_company_id: company, external_distributor_id: distributor})
    final_lead = lead_data.each_with_object({}) { |(k,v),g| g[k] = (Hash === v) ? denilize(v) : v ? v : "" }
    all_leads << final_lead.stringify_keys
  end
lead_data = @user.find_leads(start_date: start_date, end_date: end_date).leads('true')
                 .left_outer_joins(:company)
                 .select(fields)
                 .select("companies.company_external_id AS external_company_id, companies.mfg_distributor_id AS external_distributor_id")
                 .limit(limit).offset(offset).order("created_at DESC")
                 .map(&:attributes)
final_lead = ...
all_leads << ...

最新更新