值为字符串时表属性的总和

Syl*_*lar 2 ruby postgresql ruby-on-rails ruby-on-rails-5

我以前从未见过这个.我正在使用表属性,其值是字符串,而不是float/int.

Model.first.amount => "58.00"
Run Code Online (Sandbox Code Playgroud)

我需要总结所有金额.我习惯了,amount作为一个浮动,将是:

Model.all.sum(&:amount) => # total value
Run Code Online (Sandbox Code Playgroud)

用一个疯狂的猜测:

Model.all.sum(&:amount.to_i) # undefined method `to_i' for :amount:Symbol
Run Code Online (Sandbox Code Playgroud)

是否有一种简洁的方法来总结金额?或者将数据库转换为float

And*_*eko 7

使用Ruby处理数据库是超级内存无效的!

第一枪:

Model
  .pluck(:amount) # will fire sql
  .sum(&:to_f)    # convert to float, operating on resulting Array, not AR and sum
Run Code Online (Sandbox Code Playgroud)

但是处理数据库数据最有效的方法当然是SQL:

Model.sum("CAST(COALESCE(amount, '0') AS DECIMAL)")
Run Code Online (Sandbox Code Playgroud)
  1. coalesce 将替换空值 '0'
  2. sum所有值都投放到DECIMAL.