尝试将数组的内容添加到一起。
["75.00", "50.00", "25.00"]
我收到该信息的方式是
c = Credit.last
c.payments.map(&:payment_amount).to_a
我正在尝试将数组中的所有值相加。
答案 0 :(得分:1)
其他海报是正确的,因为您的问题并不符合如何询问指南。这些响应并非旨在让您失望,而是为了保持堆栈溢出的内容质量。那说这应该让你到达你需要去的地方。将来请阅读指南并相应提交。
Credit.last.payments.sum(:payment_amount.to_f)
答案 1 :(得分:1)
您可能没有考虑过的一件事是数组["75.00", "50.00", "25.00"]
包含一堆字符串。
如果你要像这样将它们加在一起:
["75.00", "50.00", "25.00"].sum
# or like this as one commenter suggested
["75.00", "50.00", "25.00"].reduce(&:+)
# or the long-handed version
["75.00", "50.00", "25.00"].reduce {|str, val| str + val }
你实际上会得到"75.0050.0025.00"
。这是因为数组中的各个字符串会连接在一起。
所以实际上,您需要先将数组转换为浮点数或整数。这可以这样做:
floats = ["75.00", "50.00", "25.00"].collect(&:to_f)
# or the long-handed version
["75.00", "50.00", "25.00"].collect {|val| val.to_f }
然后你可以加总值:
sum = floats.sum
修改强>
我只是尝试通过ActiveRecord对字符串列求和并获得异常ActiveRecord::StatementInvalid: TinyTds::Error: Operand data type nvarchar is invalid for sum operator.:
。
payment_total = Credit.last.payments.sum(:payment_amount)
# returns ActiveRecord::StatementInvalid:
# TinyTds::Error: Operand data type nvarchar is invalid for sum
# operator.
看起来这对你来说不是一个选择。虽然,您可以更改列的数据类型,使其不是字符串。如果更改列数据类型,则可以使用aggregate functions。