比较两个模型中具有相似数据的行

时间:2015-04-24 21:22:37

标签: ruby-on-rails ruby-on-rails-4 activerecord

DealerCommission表具有以下属性,其中包括: phone_id,commission_name,payment,status,differencepancy,created_at

CarrierCommission表具有以下属性,其中包括: phone_id,commissions_name,payment,created_at

我想为经销商佣金选择一系列日期,并使用相同的phone_id比较记录,以查看付款金额是否匹配。如果匹配,我想将状态更新为"付费。"如果他们不匹配,我想将状态更新为"多付"或"薪水不足。"如果carrier_commission中没有匹配的phone_id,请将状态更新为" nonpaid。"差异值会相应更新。

这一切都是由用户点击"调和"链接到"调和"经销商佣金管理员的行动

我有以下非工作代码:

# Dealer Commissions index
<%= link_to 'Reconcile', reconcile_dealer_commissions_path %>


# Dealer Commissions controller
def reconcile
  DealerCommission.reconciliation
end



# Dealer Commission model
class DealerCommission < ActiveRecord::Base
  belongs_to :dealer

  def self.reconciliation
    dealer_commissions = DealerCommission.where("created_at > Date.yesterday")
    carrier_commissions = CarrierCommission.where("created_at > Date.yesterday")
    dealer_commissions.find_each do |com|
      if com.payment == carrier_commissions.payment
        com.update(status: "Paid")
      elsif com.payment < carrier_commissions.payment
        com.update(status: "Underpaid")
      elsif com.payment > carrier_commissions.payment
        com.update(status: "Overpaid")
      end
    end
  end

end

显然,代码并没有反映完整的要求,但我至少想让比较工作。

1 个答案:

答案 0 :(得分:0)

我会寻找一种方法,在单个数据库查询中检索运营商和经销商佣金,使用eager_load,并使用sql片段和使用引用指定连接条件。

http://guides.rubyonrails.org/active_record_querying.html#specifying-conditions-on-the-joined-tables

应该为您提供匹配的经销商和承运商佣金实例,然后您可以进行比较并适当更新经销商佣金。