Rails - 'uninitialized constant' 在 ActionMailer 拦截器中使用模型时

Rails - 'uninitialized constant' when using a model in ActionMailer interceptor

我正在编写一个小机制来处理电子邮件退回和投诉。 我基本上遵循 blog post 解释如何实现这种机制。

我正在创建并注册一个 ActionMailer 拦截器,以确保我将要发送的电子邮件不会在我的应用程序 model/table 中被标记为退回或投诉。

# In config/initializers/invalid_email_interceptor.rb

class InvalidEmailInterceptor
  def self.delivering_email(message)
    if EmailResponse.exists? email: message.to
      message.perform_deliveries = false
    end
  end
end

ActionMailer::Base.register_interceptor(InvalidEmailInterceptor)

当我尝试发送电子邮件时,出现以下错误:

uninitialized constant InvalidEmailInterceptor::EmailResponse

我的应用似乎在 InvalidEmailInterceptor class 而不是我应用的模型中寻找 EmailResponse。

我尝试在

上尝试不同的变体
MyApp::EmailResponse

require 'email_response'

但我仍然遇到同样的错误,或者甚至无法启动服务器。

有什么想法吗?

谢谢,
西蒙.

我不太确定,但我的解决方法是:

  1. 检查您的 app/models/email_response.rb 以确保模型已定义。注意:email_response不是email_responses

  2. 如果是,那么你应该尝试:::EmailResponse,虽然我知道你的模型应该在你的初始化器中可用。