首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >模型法和继承法

模型法和继承法
EN

Stack Overflow用户
提问于 2015-03-24 15:54:21
回答 2查看 180关注 0票数 1

我有3种型号,用户,申请人和ApplicantCommission。

代码语言:javascript
复制
user has_many applicants 
applicant has many applicant_commissions

我想将的applicant_commission实例方法返回给育儿模型。因此,@user.getTotalCommission将返回对每个申请人的所有applicant_commissions之和。@applicant.getTotalCommission将返回属于该申请者的每个佣金,而@applicant_commission.getTotalCommission只返回一种佣金类型的总价值。

在ApplicantCommission.rb中,我有一个实例方法:

代码语言:javascript
复制
   # 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

代码语言:javascript
复制
def getTotalCommission
  self.applicant_commissions.to_a.sum(&:getTotalCommission)
end

User.rb

代码语言:javascript
复制
def getTotalCommission
  self.applicants.to_a.sum(&:getTotalCommission)
end

目前,如果我有两个申请佣金,一个12.20和另一个10.00,我得到12.2010.00。期望的输出为22.20。

它应该基于简单的继承..。所以也许我走错了路?

谢谢

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2015-03-24 16:11:50

我认为问题在于您使用了number_with_precision,它是视图中使用的一种辅助方法,用于格式化您的数字,以便显示它。它返回一个字符串。Rails还提供了sum方法,它将数组中的所有内容一起添加到一起。

本质上,您得到一个数组["12.20", "10.00"],然后它通过执行"12.20" + "10.00"得到“求和”

我会尽量保持您的总佣金作为一个数字尽可能长,并只使用number_with_precision格式,当您正在显示它。

如果您的getTotalCommission方法在ApplicantComission中只是:

代码语言:javascript
复制
def getTotalCommission
  total.round(2)
end

然后,您的求和代码将按预期工作。

我会问你在那个时候是否也需要对它进行四舍五入--只有当你输出这个值时,你才需要对它进行舍入。

当不同的类相互继承时,实际上并不是在进行继承。您的方法都有相同的接口,因为它们都有一个getTotalCommission方法,但不是通过继承。

票数 1
EN

Stack Overflow用户

发布于 2015-03-24 16:05:18

getTotalCommission方法中有一个问题,只需尝试如下:

代码语言:javascript
复制
def getTotalCommission
  # becase number_with_precision returns string.
  number_with_precision(total.round(2), :precision => 2).to_f
end

我希望这会有所帮助。

您可能需要修改User#getTotalCommission

代码语言:javascript
复制
def getTotalCommission
  number_with_precision(applicants.to_a.sum(&:getTotalCommission), precision: 2).to_f
end
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/29237233

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档