Rails ActionMailer 用户邮件发送器 无方法

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Rails ActionMailer 用户邮件发送器 无方法相关的知识,希望对你有一定的参考价值。

我不能让我的user_mailer工作。它说没有方法,我找不到原因。

从Rails中:

NoMethodError in AtendimentosController#create
undefined method `welcome_email' for UserMailer:Module

从Rails C(手动测试):

irb(main):027:0> ActionMailer::usermailer.send_welcome_email(from: "test@example.co", to: '...@gmail.com', subject: 'subjecto de teste', body: "Test")
Traceback (most recent call last):
        2: from (irb):27
        1: from (irb):27:in `rescue in irb_binding'
NoMethodError (undefined method `usermailer' for ActionMailer:Module)

class UserMailer位于mailersuser_maileruser_mailer.rb。

class UserMailer < ApplicationMailer
  def welcome_email(user)
    mail(:to => @user.email, :subject => "Welcome!")
  end
end

我在控制器处调用。

  def send_mail
    UserMailer.welcome_email(self).deliver_later
  end     
答案

你应该把这个类移到 /mailers/user_mailer.rb. 当你把文件放在一个单独的文件夹中时,要求文件的开头必须是------。Module ModuleName. 所以在你的例子中,当你把这个文件放在 /mailers/user_mailer/user_mailer.rb 它应该是这样的。

module UserMailer
  class UserMailer < ApplicationMailer
    def welcome_email(user)
      mail(:to => @user.email, :subject => "Welcome!")
    end
  end
end

然后你把它叫做: UserMailer::UserMailer.welcome_email(self).deliver

以上是关于Rails ActionMailer 用户邮件发送器 无方法的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 Actionmailer/Ruby on Rails 发送具有多个动态 smtp 的电子邮件

使用 ActionMailer 在 Rails 中发送给多个收件人

ActionMailer 在开发 Rails 4 中不发送邮件

Rails - 你如何测试 ActionMailer 在测试中发送了特定的电子邮件

Rails 中 ActionMailer Mandrill 的问题

使用 rspec 进行 ActionMailer 测试 [关闭]