Active Record 抑制器
ActiveRecord::Suppressor
阻止接收者在给定代码块期间被保存。
例如,以下模式是在发布新评论时创建通知。(通知可能会触发电子邮件、推送通知或只是出现在某个地方的 UI 中)
class Comment < ActiveRecord::Base
belongs_to :commentable, polymorphic: true
after_create -> { Notification.create! comment: self,
recipients: commentable.recipients }
end
这就是大多数情况下你想要的效果。新评论会创建新的通知。但可能存在一些特殊情况,例如复制可评论内容及其评论,在这种情况下,你可能不希望创建通知。因此,你需要一个类似于以下的关注点。
module Copyable
def copy_to(destination)
Notification.suppress do
# Copy logic that creates new comments that we do not want
# triggering notifications.
end
end
end
命名空间