【问题标题】:rails sums model导轨总和模型
【发布时间】:2013-03-24 11:19:14
【问题描述】:

我的应用中有很多求和函数。我将所有数据总和移动到一个单独的模型......让我们称之为......总和。这将使调用这些数字更快,因为我不会在每次需要对许多行求和时都确定数据库。

我想做的是每次创建或更新某些其他模型时更新总和行(许多属性)。我正在尝试使用类方法通过每个模型进行此操作,但由于某种原因它不起作用。

我想知道在哪里可以创建一个通用方法,该方法可以从我选择的任何模型的 after_create 回调中调用。该总和与一个帐户相关联,该帐户不是正在更新的模型。其他帐户关联模型将达到总和模型。因此,我可能需要将 self.account_id 传递给回调方法。

与 Papertrails 版本模型一样,每次保存另一个模型时都会更新。

【问题讨论】:

    标签: ruby-on-rails ruby-on-rails-3 model


    【解决方案1】:

    看看Statistics gem。

    它有一个缓存选项,使用 Rails 缓存来防止对数据库的重复聚合调用。

    我更喜欢这样的东西,而不是每次更新属性时都进行更新。如果您不打算将sums 模型保存在内存中,那么您将不得不对sums 表进行与实际更新一样多的更新。

    虽然与读取时间相比,写入时间开销可能是可以接受的,但统计信息提供了其他优化选项。

    【讨论】:

    • 看起来不错。我会试试看。我想如果 gem 正在缓存,那么它比使用单独的表更好。宝石很久没有更新了……有没有更新/更好的选择?
    • 您知道是否可以将统计信息与关联一起使用吗? @user.accounts.statistics(计数::全部)。我有很多帮手可以计算或求和……比如@rating.flights.sum(:xc)。使用 statics gem 会提高这些总和和计数的效率吗?
    • this example 使用has_many 关联的统计信息。这就是你所追求的吗?至于效率,恐怕不能一概而论,相当主观。到目前为止,我还没有收到任何性能投诉。
    猜你喜欢
    • 2017-04-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-02-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-11-01
    相关资源
    最近更新 更多