我似乎无法弄清楚的简单问题:
在控制器中:
@clientsMonthYearQuery = Client.group(:month_year)
在视图中我有这个查询
@clientsMonthYearQuery.average(:charge)
如何对查询结果进行四舍五入,将平均值四舍五入到小数点后两位?
*注意,在视图中链接 AR 计算有商业原因,我给出的示例是根据实际情况进行简化的
我刚刚在尝试用 Chartkick 做同样的事情时遇到了这个。我将结果转换为一个数组(实际上是一个数组数组,其中每个子数组都是 [client,charge]),然后舍入每个子数组中的第二个值,如下所示:
@clientsMonthYearQuery.average(:charge).to_a
@clientsMonthYearQuery.each do |record|
record[1] = record[1].round(2)
end
但是我在控制器中执行此操作。您当然可以将结果保留为散列并以类似的方式对其进行迭代,但我更喜欢数组(chartkick 接受两者),这对我有用。
您可以对 ActiveRecord 查询返回的数字进行四舍五入,如下所示:
@clientsMonthYearQuery.average(:charge).round(2)
如果您在视图中执行此操作,您也可以使用这个方便的 Rails Helper:
<%= number_with_precision @clientsMonthYearQuery.average(:charge), :precision => 2 %>
您可以使用
select
通过数据库进行舍入,而不是强制 Ruby 进行舍入(Ruby 速度较慢)。
class Client
scope :average_charge_by_month_year, -> do
group(:month_year)
.select(
:month_year,
'ROUND(AVG(charge)) AS average_charge'
)
.order('average_charge DESC')
end
class << self
def average_charge_by_date
average_quantity_by_product_name.to_a.pluck(
:month_year,
:average_charge
)
end
end
end
那就拨打:
Client.average_charge_by_date
您将收到一个包含month_years和四舍五入平均费用的数组。
(如果您想要哈希,请不要使用
.to_a.pluck
,只需使用 map
和 to_h
代替。)
此外,此查询按四舍五入平均值排序,这又节省了时间。