【发布时间】:2017-09-17 19:39:34
【问题描述】:
我在我的控制器中使用此代码来访问Heavy 分类中所有用户的平均paper_weight。
if User.where(industry_type: 'Heavy')
.joins(:papers)
.where(papers: { paper_type: 'Officepaper' } )
.pluck('avg(paper_weight)').first.nil?
@heavy_indust_officepaper == 0
else
@heavy_indust_officepaper = User.where(industry_type: 'Heavy')
.joins(:papers)
.where(papers: { paper_type: 'Officepaper' } )
.pluck('avg(paper_weight)').first * 3
end
然后变量@heavy_indust_officepaper显示在一个视图中。
问题在于,当一个或多个用户在 paper_type: 'Officepaper' 中有一个 nil 条目时,上面的代码似乎无法正确计算平均值。
我知道,因为我在 industry_type: 'Heavy' 中有两个用户
其中一个有一个paper_type: 'Officepaper' 的条目,即十进制30。
而另一个用户在paper_type: 'Officepaper' 中有nil 条目。
根据我的理解计算应该是30 + 0 / 2(users) = 15
然后15 乘以3 应该得到45
但是变量@heavy_indust_officepaper在视图中显示90...这一定是30 * 3的结果
有没有办法在上面的代码中将nil转换为0???
有人可以给我建议吗?
这是我今天早些时候提出的一个问题的链接,我从中获得了有关此代码的帮助 Using .average with .pluck in ruby on rails app?
【问题讨论】:
-
你试过
nil.to_i吗?在irb中尝试它...而不是使用.first.to_i * 3...只是一个想法... -
你为什么要运行两次相同的查询而不是使用局部变量?
-
如果在给定的答案中有解决您的问题的答案,请确保选择并接受答案。
标签: ruby-on-rails ruby ruby-on-rails-4 activerecord ruby-on-rails-5