我有一个用户模型和一个跟踪Github拉取请求的PullRequest模型。我的用户模型有:
has_many :pull_requests_as_creator, class_name:'PullRequest', foreign_key: 'creator_id', dependent: :destroy
has_many :pull_requests_as_merger, class_name:'PullRequest', foreign_key: 'merger_id', dependent: :destroy
我的PullRequest模型有:
belongs_to :creator, class_name: 'User', counter_cache: :pull_requests_created_count
belongs_to :merger, class_name: 'User', counter_cache: :pull_requests_merged_count
如果我首先添加没有merger_id的拉取请求那么它很好,创建者计数会更新1 - 但如果拉取请求被合并,则记录会被merger_id更新并计算跳起来2(创建者计数保持原样) - 如果我添加一个最初有合并和创建者的拉取请求,则两者都会增加1并且一切都很好。
可能导致此问题的原因是什么?我尝试添加一个before_save:callback来首先将计数器递减1(我不想这样做!)但这根本不起作用。
答案 0 :(得分:0)
我仍然不确定为什么会这样 - 我想也许是因为计数器功能可能会绑定到after_save和after_destroy回调,但这并不能解释是什么让它增加两倍。
我使用了执行
的after_apdate回调 after_update :update_counter
def update_counter
User.reset_counters(self.merger.id, :pull_requests_as_merger)
end
希望这有助于其他人遇到类似问题。