我有3种型号,用户,申请人和ApplicantCommission。
user has_many applicants
applicant has many applicant_commissions我想将和的applicant_commission实例方法返回给育儿模型。因此,@user.getTotalCommission将返回对每个申请人的所有applicant_commissions之和。@applicant.getTotalCommission将返回属于该申请者的每个佣金,而@applicant_commission.getTotalCommission只返回一种佣金类型的总价值。
在ApplicantCommission.rb中,我有一个实例方法:
# Returns the full amount of commission that the post has earned from this commission group.
def getTotalCommission
#Does some calculations
return number_with_precision(total.round(2), :precision => 2)
endApplicant.rb
def getTotalCommission
self.applicant_commissions.to_a.sum(&:getTotalCommission)
endUser.rb
def getTotalCommission
self.applicants.to_a.sum(&:getTotalCommission)
end目前,如果我有两个申请佣金,一个12.20和另一个10.00,我得到12.2010.00。期望的输出为22.20。
它应该基于简单的继承..。所以也许我走错了路?
谢谢
发布于 2015-03-24 16:11:50
我认为问题在于您使用了number_with_precision,它是视图中使用的一种辅助方法,用于格式化您的数字,以便显示它。它返回一个字符串。Rails还提供了sum方法,它将数组中的所有内容一起添加到一起。
本质上,您得到一个数组["12.20", "10.00"],然后它通过执行"12.20" + "10.00"得到“求和”
我会尽量保持您的总佣金作为一个数字尽可能长,并只使用number_with_precision格式,当您正在显示它。
如果您的getTotalCommission方法在ApplicantComission中只是:
def getTotalCommission
total.round(2)
end然后,您的求和代码将按预期工作。
我会问你在那个时候是否也需要对它进行四舍五入--只有当你输出这个值时,你才需要对它进行舍入。
当不同的类相互继承时,实际上并不是在进行继承。您的方法都有相同的接口,因为它们都有一个getTotalCommission方法,但不是通过继承。
发布于 2015-03-24 16:05:18
getTotalCommission方法中有一个问题,只需尝试如下:
def getTotalCommission
# becase number_with_precision returns string.
number_with_precision(total.round(2), :precision => 2).to_f
end我希望这会有所帮助。
您可能需要修改User#getTotalCommission
def getTotalCommission
number_with_precision(applicants.to_a.sum(&:getTotalCommission), precision: 2).to_f
endhttps://stackoverflow.com/questions/29237233
复制相似问题