【问题标题】:Before filter in action mailer Rails 3在使用邮件程序 Rails 3 过滤之前
【发布时间】:2013-07-10 08:27:52
【问题描述】:

我需要什么:

类似于 Rails 3 中 ActionMailer 中的 before_filter 的东西。

问题:

我正在使用 Rails 3 并希望在 ActionMailer 中有一个 before_filter。检查了actionmailer api 并了解了 before_action 和 after_action 回调。实施时会出现错误:

NoMethodError: undefined method `before_action' for Notifier:Class

后来得知这个post没有对Rails 3的操作前调用

是否有任何钩子或宝石,以便我们可以在 Rails 3 中使用类似 before_filter 的东西。

请帮忙。非常感谢!!

【问题讨论】:

    标签: ruby-on-rails-3 callback actionmailer before-filter


    【解决方案1】:

    可以通过包含 AbstractController::Callbacks 来实现。这模仿了 Rails 4 的变化,除了 cmets 和测试,只包括回调。

    class MyMailer < ActionMailer::Base
      include AbstractController::Callbacks
    
      after_filter :check_email
    
      def some_mail_action(user)
        @user = user
        ...
      end
    
      private
       def check_email
         if @user.email.nil?
         message.perform_deliveries = false
        end
        true
       end
    
    end
    

    参考 - How to add a before_filter in UserMailer which checks if it is OK to mail a user?

    【讨论】:

    • 警告,在 Rails 3 上(使用 ActionMailer 3.2.21 验证),在 after_filter 中调用“mail”会再次调用 ActionMailer::Base#mail。从 3.2.21 开始,“邮件”不再被设计为重复调用:您第一次传递的某些信息将是粘性的(例如正文),而其他信息则不是(例如主题)。引用“消息”而不是“邮件”更安全、更可靠。在上述情况下,“mail.perform_deliveries = false”可以完成工作(防止邮件发出),但它也有副作用(将主题重置为默认值等)。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-09-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-11-22
    • 2011-08-22
    相关资源
    最近更新 更多