Ruby on Rails,返回0而不是错误

时间:2016-08-08 11:01:25

标签: ruby-on-rails ruby

我正在构建一个Ruby on Rails应用程序,我经常遇到错误:

GETDATE()

当我进行一些计算或查询时输入字符串或其他变量,例如:

TypeError: nil can't be coerced into Float

我想我理解这个问题,但是你知道我是否有一个简单的方法可以返回0而不是像这样的错误,因为它可能是一个美发师目前没有接受的约会。

一个解决方案可以在进行计算之前检查一切是否存在,但我确信这不是最好的解决方案!

感谢您的帮助!

2 个答案:

答案 0 :(得分:1)

如果Appointment#price是db列,您可以添加一个额外的检查:

.where.not(price: nil)

如果它是方法或虚拟属性,您可以将值转换为float或int,这会将nil转换为0的数字表示形式:

.map{ |app| app.price.to_f } # or `app.price.to_i`

或者你可以compact map的结果,这会删除导致nil的条目

.map{ |app| app.price }.compact

答案 1 :(得分:1)

假设您的关联是按照我想象的方式设置的。

首先,我们可以通过

获得约会
Hairdresser.find(hairdresser_id).appointments

然后,我们可以按状态过滤

Hairdresser.find(hairdresser_id).appointments.where("appointments.status" => ["personal", "accepted"])

最后,我们可以使用sum函数来总结价格而无需担心nil s

upcoming = Hairdresser.find(hairdresser_id).appointments.where("appointments.status" => ["personal", "accepted"]).sum("appointments.price")