在Ruby中,减量(-=)函数在0处停止

时间:2018-11-14 18:09:27

标签: ruby-on-rails ruby

我有以下代码行,当他们将股票出售给其他人时,它们非常简单地减少股东的股票数量(数据库中的整数)。效果很好,符合预期。

@selling_shareholder.update_attribute(:number_of_stocks, @selling_shareholder.number_of_stocks -= @transaction.number_of_stocks)

很简单,我想做的就是在number_of_stocks达到0时停止递减功能,即不可能有负数。

我想我可以在行尾使用一个简单的unless @selling_shareholder.number_of_stocks > 0,但是我想知道如果不使用循环就可以实际使用吗?

1 个答案:

答案 0 :(得分:4)

我建议在您的模型中创建一个称为#decrement_stock的方法来处理该逻辑。您可以设置所有应有的行为,例如引发异常。该方法遵循“ {tell don't ask”原则。这也是执行单个任务的简单工作单元,因此可以轻松使用自己喜欢的单元测试框架进行测试。

正如名工程师所建议的那样,如果您希望控制器处理错误,只需在模型上添加验证也是一个很好的解决方案。