From 42518a13234cd185bad8ca066f9cc62bdab22fbe Mon Sep 17 00:00:00 2001 From: CactusPuppy Date: Fri, 9 Apr 2021 00:42:14 -0700 Subject: [PATCH] Fully address AR callback issues --- app/models/concerns/track_saved_changes.rb | 2 +- app/models/user.rb | 23 ++++++++-------------- 2 files changed, 9 insertions(+), 16 deletions(-) diff --git a/app/models/concerns/track_saved_changes.rb b/app/models/concerns/track_saved_changes.rb index a7e928d4..db75e625 100644 --- a/app/models/concerns/track_saved_changes.rb +++ b/app/models/concerns/track_saved_changes.rb @@ -25,7 +25,7 @@ module TrackSavedChanges # on save def ts_track_saved_changes # maintain an array of ActiveModel::Dirty.changes - @ts_saved_changes_history << changes.dup + @ts_saved_changes_history << previous_changes.dup # accumulate the most recent changes @ts_saved_changes_history.last.each_pair { |k, v| ts_track_saved_change k, v } end diff --git a/app/models/user.rb b/app/models/user.rb index 27b8ccc2..09707336 100644 --- a/app/models/user.rb +++ b/app/models/user.rb @@ -81,15 +81,11 @@ class User < ApplicationRecord after_save :touch_events - after_create_commit :mailbluster_create_lead - after_destroy_commit :mailbluster_delete_lead - # Note that because a commit may cause multiple changes - # which are not fully tracked by ActiveRecord::Dirty, - # we must resort to using a ActiveRecord::Concern which accumulates - # changes from a commit (app/models/concerns/track_saved_changes.rb) - # See https://github.com/ccmcbeck/after-commit - after_update_commit :mailbluster_update_email, if: ->(obj){ obj.ts_saved_changes.key? 'email' } - after_update_commit :mailbluster_update_name, if: ->(obj){ obj.ts_saved_changes.key? 'name' } + # after_create_commit :mailbluster_create_lead + after_commit :mailbluster_create_lead, on: :create + # after_destroy_commit :mailbluster_delete_lead + after_commit :mailbluster_delete_lead, on: :destroy + after_commit :mailbluster_update_lead, on: :update, if: ->(user){ ['name','email'].any? { |key| user.ts_saved_changes.key? key } } # add scope scope :comment_notifiable, ->(conference) {joins(:roles).where('roles.name IN (?)', [:organizer, :cfp]).where('roles.resource_type = ? AND roles.resource_id = ?', 'Conference', conference.id)} @@ -391,12 +387,9 @@ class User < ApplicationRecord MailblusterDeleteLeadJob.perform_later self end - def mailbluster_update_email - MailblusterEditLeadJob.perform_later(self, old_email: saved_changes['email'][0]) - end - - def mailbluster_update_name - MailblusterEditLeadJob.perform_later self + def mailbluster_update_lead + MailblusterEditLeadJob.perform_later(self, old_email: ts_saved_changes.fetch('email', [nil])[0]) + ts_reset_saved_changes end def touch_events