从模型中提取 after_commit 回调
Extract the after_commit callback from models
我正在尝试清理一些模型,同时使我的代码更具凝聚力,将所有可能触发特定服务的东西收集在一个地方。
我目前拥有的一些伪代码:
any_commits_on User,
will_trigger: -> { CommonService.run!(self.id, :alive) },
if: -> { self.some_association.alive? }
any_commits_on User,
will_trigger: -> { CommonService.run!(self.id, :dead) },
if: -> { self.whatever.dead? }
any_commits_on Product,
will_trigger: -> { CommonService.run!(self.id) }
然后我有一个方法(它不起作用,但它是我想要实现的粗略表示):
def any_commits_on(klass, **args)
klass.after_commit { args[:will_trigger].call if args[:if]&.call || true }
end
如何正确实施 #any_commits_on
?
None 我发现的 gems 提供了实现此目的的直接方法,但我也愿意接受其他建议。
最佳。
这最终奏效了:
def any_commits_on(klass, **args)
klass.after_commit args[:will_trigger], if: args[:if]
end
我正在尝试清理一些模型,同时使我的代码更具凝聚力,将所有可能触发特定服务的东西收集在一个地方。
我目前拥有的一些伪代码:
any_commits_on User,
will_trigger: -> { CommonService.run!(self.id, :alive) },
if: -> { self.some_association.alive? }
any_commits_on User,
will_trigger: -> { CommonService.run!(self.id, :dead) },
if: -> { self.whatever.dead? }
any_commits_on Product,
will_trigger: -> { CommonService.run!(self.id) }
然后我有一个方法(它不起作用,但它是我想要实现的粗略表示):
def any_commits_on(klass, **args)
klass.after_commit { args[:will_trigger].call if args[:if]&.call || true }
end
如何正确实施 #any_commits_on
?
None 我发现的 gems 提供了实现此目的的直接方法,但我也愿意接受其他建议。
最佳。
这最终奏效了:
def any_commits_on(klass, **args)
klass.after_commit args[:will_trigger], if: args[:if]
end