Ruby on rails Rails扩展了许多集合,以包含另一个修改结果的参数

Ruby on rails Rails扩展了许多集合,以包含另一个修改结果的参数,ruby-on-rails,ruby,ruby-on-rails-3,activerecord,overriding,Ruby On Rails,Ruby,Ruby On Rails 3,Activerecord,Overriding,我的开票应用程序记录多个付款/发票。我遇到的问题是,客户可以用高于所欠金额的现金支付。因此,当我查看摘要时,现金总额大于欠款金额,因此对我得到的报酬不太现实(因为我给了零钱)。因此,基本上我想做的是覆盖收款,这样,如果我给它一个参数(true),它将显示所有付款,但任何欠客户的金额将从现金付款中扣除 示例1: 发票总额为25美元 Interac付费:10美元 支付的现金:20美元 零钱:5美元 示例2(现金返还): 发票总额为25美元 Interac付费:30美元 零钱:5美元 在my Invo

我的开票应用程序记录多个付款/发票。我遇到的问题是,客户可以用高于所欠金额的现金支付。因此,当我查看摘要时,现金总额大于欠款金额,因此对我得到的报酬不太现实(因为我给了零钱)。因此,基本上我想做的是覆盖收款,这样,如果我给它一个参数(true),它将显示所有付款,但任何欠客户的金额将从现金付款中扣除

示例1:
发票总额为25美元
Interac付费:10美元
支付的现金:20美元
零钱:5美元

示例2(现金返还):
发票总额为25美元
Interac付费:30美元
零钱:5美元

在my Invoice.rb模型中:

has_many :payments, :dependent => :destroy do
    def ???(actual_amounts = false)
        // call to super() ???
        // Find any cash payments and override value to account for change.
        // If there isn't a cash payment, make one.
    end
end

这是我对这两个例子的预期结果:

示例1:
调用
@invoice.payments
分别产生10美元和20美元
调用
@invoice.payments(true)
分别产生10美元和15美元

示例2:
调用
@invoice.payments
产生$30

调用
@invoice.payments(true)
产生30美元的内部现金和-5美元的现金

我刚刚在发票模型中创建了一个显示“退货更改”的自定义方法。事实证明,显示“基本上支付了什么”是没有意义的……特别是当我想将发票付款与我们的付款处理程序的记录进行比较时。

是否必须在
付款关联上?因为一旦你开始让你的关联返回值而不是一个
关系
,就没有回头路了。这是一个很好的观点。我会尽量避免的,好人。但是,如果您想编辑您的问题,以执行类似于
def with_restain
的操作,我可以向您展示如何执行此操作。