我最近从 1.1.1 升级到了 ahoy_email 版本 2.0.3,并且我一直在重构我的代码以使用最新版本,但我对我曾经拥有的一个功能有点问题。问题如下:
我希望能够禁用对某些已发送邮件的跟踪。
随着版本 2.0.0 中对 ahoy_email 所做的更改,所有设置 ahoy_settings 的类方法都添加了一个 before_action ,它合并了三个方法中的选项集,即track_clicks
和has_history
,utm_params
所以因为选项只合并在一个before_action 我不能执行以下操作:
class DigestMailer < ActionMailer::Base
has_history user: -> { @recipient }, extra: -> { {digest_message_id: @digest_message.id} }
track_clicks campaign: "digest"
def digest(digest_message, user, **options)
@recipient = user
@digest_message = digest_message
self.class.has_history options
....
end
end
DigestMailer.digest(DigestMessage.first, User.first, click: false, message: false).deliver_now
我在摘要操作中设置的选项实际上不会被合并,因为它们应该在调用digest
操作之前被合并
我能做的是以下几点:
class DigestMailer < ActionMailer::Base
has_history user: -> { @recipient }, extra: -> { {digest_message_id: @digest_message.id} }
track_clicks campaign: "digest"
def digest digest_message, user, **options
@recipient = user
@digest_message = digest_message
self.ahoy_options = AhoyEmail.default_options.merge(options)
end
end
DigestMailer.digest(DigestMessage.first, User.first, click: false, message: false).deliver_now
这是可行的,因为我在调用回调之后和调用回调之前覆盖了该ahoy_options
属性并且它可以工作。before_action
after_action
所以我的问题是:这是解决这个问题的正确方法吗?
因为这个 commit,从 3 年前开始,清楚地说:
保留禁用跟踪的旧方法
但是在文档中找不到它。