我有 line_items
和 unit_price
和 quantity
属性(以及其他)。
在 Ruby on Rails 中对此进行建模的最佳方法是什么?
现在,我的 LineItem
模型中的许多函数都遵循这种模式:
def total_price
unit_price * quantity
end
这行得通,但我想知道:这种方法是否有用,或者当有 100 万用户同时使用它时,它是否会使我的应用崩溃?
另一种方法是将 total_price
存储为数据库字段,每次保存后都会更新类似这样的内容:after_save :update_total
。不过,我不是冗余数据库列的忠实拥护者。我想将它们保持在最低限度。
这样做的专业方法是什么?
最佳答案
这是计算值与存储的一般问题。我不确定所有情况都有一个答案,但这里有一些要考虑的因素:
- 计算成本高吗?如果是,最好存储
- unit_price 之类的变量是否在变化?如果是,最好计算,因为如果你存储,当 unit_price 改变时你将不得不重新计算所有的 total_price
- 您会查询计算值吗?如果是,最好存储 并使用数据库功能(例如,如果您想要总价大于 500 的所有产品)。
- 请注意,在这种(简单)情况下,还可以要求数据库进行计算(WHERE UNIT_PRICE * QUANTITY > 500),但某些类型的计算可能无法或无法用 SQL 表达。
对于所有“性能”方面,唯一正确的答案是:衡量。你不能事先说出来。这意味着最初,选择最简单的方法(我会计算),分析,然后看看是否有理由切换。 Rails 和 Ruby 有很多分析工具(您可以从 Rails performance testing 开始)。
关于ruby - 在 Ruby on Rails 中计算/存储 line_item 总数的最佳方法是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14893474/