Avoid ActiveRecord callbacks
Unexpected side effects should be avoided. They introduce tight coupling between the data model and the system log. Additionally, it is difficult to opt-out of running callbacks when interacting with models.
A good alternative is to create a service object that is specific to the case where the callback is needed.
Bad 🔗
class BlogPost < ActiveRecord::Base
  belongs_to :blog
  after_create :notify_subscribers
  private
  def notify_subscribers
    blog.subscribers.each do |subscriber|
      BlogPostNotificationMailer.deliver(id, subscriber.id)
    end
  end
end
Good 🔗
class BlogPost < ActiveRecord::Base
  belongs_to :blog
end
class BlogPostCreationService
  def call(blog, blog_post_params)
    ActiveRecord.transaction do
      blog_post = blog.blog_posts.create(blog_post_params)
      blog.subscribers.each do |subscriber|
        BlogPostNotificationMailer.deliver(blog_post.id, subscriber.id)
      end
    end
  end
end