ruby-on-rails - 在 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
的,但我想知道不使用循环是否真的可以工作?
解决方案
我建议在您的模型中创建一个名为类似的方法#decrement_stock
来处理该逻辑。您可以设置所有应该预期的行为,例如引发异常。这种方法遵循“告诉不问”的原则。它也是执行单个任务的简单工作单元,可以轻松使用您喜欢的单元测试框架进行测试。
正如engineersmnky 建议的那样,如果您希望控制器处理错误,只需在模型上添加验证也是一个很好的解决方案。
推荐阅读
- python - 发送 POST 请求的正文
- node.js - 升级到 Mojave 10.14.6 后 NPM、Node 无法打开
- windows - Windows:在快捷方式目标字符串中包含端口号
- python - 无法设置 virtualenv - 源激活问题.ps1
- excel - 如何在不使用转置的情况下垂直列出水平数据?
- laravel - Nuxt 或 Laravel 无法获取访问者的公共 ip
- airflow - 将任务从一个 DAG 复制到另一个 DAG 的最佳方法?
- sql-server - SQL Report Builder 3.0 - 如何分组获取结果(截图)
- single-sign-on - 使用 OneLogin 实现 SSO 时,客户端是否需要 SP 元数据?
- json - VBA:英国银行假日的嵌套 JSON 对象结构 - 运行时错误 13、438 和 449