ruby - 在 Ruby on Rails 中计算/存储 line_item 总数的最佳方法是什么?

标签 ruby ruby-on-rails-3 activerecord

我有 line_itemsunit_pricequantity 属性(以及其他)。

在 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/

相关文章:

ruby-on-rails - 从 User.rb 模型访问 ApplicationHelper

mysql - Rails 对两个关联模型的复杂搜索条件

ruby-on-rails - 对一组在 Ruby 中几乎匹配的实例进行分组

mysql - ActiveRecord::StatementInvalid: Mysql::Error: 不正确的字符串值: '\xE2\x98\xBA.\x0D\x0A...'

ruby-on-rails - 如何过滤 ActiveRecord 模型的 association_ids?

ruby - 使用 Ruby 查找一个月中的任何特定日期

ruby-on-rails - 为什么我的部分无法正确接收参数?

ruby - Ruby:Ruby Socket对象中的remote_address/local_address存放在哪里?

ruby - 如何通过 ARGV 打印我正在使用的文件的行号?

ruby - 从单例方法访问实例变量