首页 > 解决方案 > 在 Ruby 中,减量 (-=) 函数在 0 处停止

问题描述

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

@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的,但我想知道不使用循环是否真的可以工作?

标签: ruby-on-railsruby

解决方案


我建议在您的模型中创建一个名为类似的方法#decrement_stock来处理该逻辑。您可以设置所有应该预期的行为,例如引发异常。这种方法遵循“告诉不问”的原则。它也是执行单个任务的简单工作单元,可以轻松使用您喜欢的单元测试框架进行测试。

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


推荐阅读