使用column_names时,有什么方法可以减少counter_culture gem吗?

时间:2019-10-10 14:18:00

标签: ruby ruby-on-rails-5 counter-cache

我需要减少组中活动用户的数量,实际上,当新用户从组中的不活动状态变为活动状态时,实际上是在正确增加。但是,当从活动状态更改为非活动状态然后又重新变为活动状态时,活动用户的数量又增加了一个。

所以我需要在从活动状态变为非活动状态时减少计数器。

直到现在,我一直尝试使用delta_magnitude参数来减小它,但是没有用。

这实际上是类的外观

class GroupUser < ApplicationRecord
    attr_accessor :send_challenge

    belongs_to :group
    belongs_to :user

    counter_culture :group, column_name: proc { |model| model.active? ? 'users_count' : nil },
                                   column_names: {
                                     ['group_users.active = ?', true] => 'users_count'
                                   }

如您所见,我使用dynamic-column-names

这是我到目前为止尝试过的

class GroupUser < ApplicationRecord
    attr_accessor :send_challenge

    belongs_to :group
    belongs_to :user

    counter_culture :group, column_name: proc { |model| model.active? ? 'users_count' : nil },
                                   column_names: {
                                     ['group_users.active = ?', true] => 'users_count'
                                   },
                                   delta_magnitude: 1

在这里我添加了delta-magnitude,试图使其减小但没有用。

我有一种表达条件使其减少的方法吗?

2 个答案:

答案 0 :(得分:0)

最后,我只是在同一查询中手动将其从有效更改为无效。如果有人知道正确的答案,则下次会有用。

答案 1 :(得分:0)

如果您使用包含回调的正常保存更新 active 属性,则当前 counter_culture 版本实际上会重新计算值更改的计数。 根据自述文件:

Updates counter cache when values change, not just when creating and destroying

在报告时,这可能是一个错误,但现在应该可以工作了。