在rails中一起添加数组内容

时间:2016-07-12 23:29:17

标签: ruby-on-rails arrays ruby math

尝试将数组的内容添加到一起。 ["75.00", "50.00", "25.00"]我收到该信息的方式是

c = Credit.last
c.payments.map(&:payment_amount).to_a

我正在尝试将数组中的所有值相加。

2 个答案:

答案 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