我有3个模型,用户,申请人和申请人委员会。
user has_many applicants
applicant has many applicant_commissions
我想将applicant_commission实例方法的总和返回到育儿模型。因此,@user.getTotalCommission
将返回所有申请人的所有申请人的总和。 @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)
end
Applicant.rb
def getTotalCommission
self.applicant_commissions.to_a.sum(&:getTotalCommission)
end
User.rb
def getTotalCommission
self.applicants.to_a.sum(&:getTotalCommission)
end
目前,如果我有2个申请人佣金,一个12.20和另一个10.00,我得到12.2010.00。期望的输出为22.20。
它应该是基于简单继承的基于 。所以也许我完全走错了路线?
由于
答案 0 :(得分:1)
我认为问题在于您使用number_with_precision
这是一种帮助方法,可以在视图中使用格式化您的数字以便显示它。它返回一个字符串。 Rails还提供了sum
方法,它将数组中的所有内容添加到一起。
基本上你得到一个数组["12.20", "10.00"]
,然后通过"12.20" + "10.00"
我会尝试尽可能长时间地将您的总佣金作为一个数字,并且只在显示时使用number_with_precision
格式化。
如果getTotalCommission
中的ApplicantComission
方法只是:
def getTotalCommission
total.round(2)
end
然后你的求和代码将按预期工作。
P.S。我怀疑你是否甚至需要在那时将它舍入 - 你可能只需要在输出值时将其舍入
P.P.S。你实际上并没有进行继承,这是不同类继承的时候。你的方法都有相同的接口,因为它们都有getTotalCommission
方法但不是通过继承。
答案 1 :(得分:0)
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
end