Ruby on rails 禁用对rails ahoy_电子邮件的跟踪

Ruby on rails 禁用对rails ahoy_电子邮件的跟踪,ruby-on-rails,ahoy,Ruby On Rails,Ahoy,我最近从1.1.1升级到了ahoy_email版本2.0.3,我一直在重构代码以使用最新版本,但我以前的一项功能有点问题。问题如下: class DigestMailer < ActionMailer::Base has_history user: -> { @recipient }, extra: -> { {digest_message_id: @digest_message.id} } track_clicks campaign: "digest&quo

我最近从1.1.1升级到了ahoy_email版本2.0.3,我一直在重构代码以使用最新版本,但我以前的一项功能有点问题。问题如下:

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

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
class DigestMailer < ActionMailer::Base
  has_history(
    user: -> { params[:recipient] },
    extra: -> { {digest_message_id: params[:digest_message].id} },
    if: -> { params[:options].try(:fetch, :message) != false }
  )

  track_clicks(
    campaign: "digest",
    if: -> { params[:options].try(:fetch, :track_clicks) != false }
  )

  def digest
    recipient = params[:recipient]
    digest_message = params[:digest_message]

    Rails.logger.info "Sending digest to #{recipient} with email #{recipient.data.email}"
    internal_send_digest_message(digest_message.title)
  end
end

DigestMailer.with(digest_message:DigestMessage.first, recipient: User.first, options: {track_clicks: false, message: false}).deliver_now
我希望能够禁用对某些已发送邮件的跟踪

在版本2.0.0中对a hoy_电子邮件所做的更改后,所有设置a hoy_设置的类方法都会执行“添加前”操作,该操作会合并三种方法中的选项集,即,
跟踪单击
具有_历史
utm_参数
,因此,由于这些选项仅在before_操作中合并,因此我无法执行以下操作:

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

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
class DigestMailer < ActionMailer::Base
  has_history(
    user: -> { params[:recipient] },
    extra: -> { {digest_message_id: params[:digest_message].id} },
    if: -> { params[:options].try(:fetch, :message) != false }
  )

  track_clicks(
    campaign: "digest",
    if: -> { params[:options].try(:fetch, :track_clicks) != false }
  )

  def digest
    recipient = params[:recipient]
    digest_message = params[:digest_message]

    Rails.logger.info "Sending digest to #{recipient} with email #{recipient.data.email}"
    internal_send_digest_message(digest_message.title)
  end
end

DigestMailer.with(digest_message:DigestMessage.first, recipient: User.first, options: {track_clicks: false, message: false}).deliver_now
这是可行的,因为我在调用
before\u操作
回调之后覆盖
ahoy\u选项
属性,调用
before\u操作
回调之后覆盖
before调用
before\u操作
回调之后,它就起作用了

所以我的问题是:这是正确的方法吗

因为,从3年前开始,他清楚地说:

保留禁用跟踪的旧方法


但是在文档中找不到它。

对于遇到相同问题的任何人,我已经找到了解决方案,它包括两个方面:

使用a并使用
:如果
轨迹的
选项单击
具有历史记录
utm参数
。代码可以重写如下:

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

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
class DigestMailer < ActionMailer::Base
  has_history(
    user: -> { params[:recipient] },
    extra: -> { {digest_message_id: params[:digest_message].id} },
    if: -> { params[:options].try(:fetch, :message) != false }
  )

  track_clicks(
    campaign: "digest",
    if: -> { params[:options].try(:fetch, :track_clicks) != false }
  )

  def digest
    recipient = params[:recipient]
    digest_message = params[:digest_message]

    Rails.logger.info "Sending digest to #{recipient} with email #{recipient.data.email}"
    internal_send_digest_message(digest_message.title)
  end
end

DigestMailer.with(digest_message:DigestMessage.first, recipient: User.first, options: {track_clicks: false, message: false}).deliver_now
class DigestMailer{params[:recipient]},
额外:->{{digest_message_id:params[:digest_message].id},
if:->{params[:options].try(:fetch,:message)!=false}
)
跟踪点击(
运动:“文摘”,
if:->{params[:options].try(:fetch,:track_clicks)!=false}
)
def摘要
收件人=参数[:收件人]
摘要消息=参数[:摘要消息]
Rails.logger.info“使用电子邮件#{recipient.data.email}向#{recipient}发送摘要”
内部消息发送消息摘要(摘要消息标题)
结束
结束
DigestMailer.with(digest_消息:DigestMessage.first,收件人:User.first,选项:{track_clicks:false,message:false})。立即交付
它将按预期工作