0

我正在Ruby 2.4.1中的Rails 5.1.2应用程序。我创建一个简单的邮件使用在类如下所示:Rails 5.1邮件错误的参数数量0预计2

class PagingMailer < ApplicationMailer 
     include SendGrid 
     default from: Rails.application.secrets.no_reply_email 

     def message(paging_id, email) 
     @paging = Paging.find(paging_id) 
     mail to: email, subject: "#{@paging.user.username} has sent you a message" 
     end 
    end 

PagingMailer类的message方法采用paging_id(整数)的参数,被传递的电子邮件地址的第二个参数(串)。最初我有一个sidekiq工人被解雇,并且它不会给出错误数量的参数,给出0预期的2例外。

所以我启动了一个滑轨控制台,并试图做一个简单的测试,让sidekiq避开以防万一。

Loading development environment (Rails 5.1.2) 
irb(main):001:0> PagingMailer.message(33, "[email protected]").deliver 
PagingMailer#message: processed outbound mail in 69.1ms 
ArgumentError: wrong number of arguments (given 0, expected 2) 
    from app/mailers/paging_mailer.rb:5:in `message' 
    from app/mailers/paging_mailer.rb:7:in `message' 
    from (irb):1 

stacktrace指向消息方法中的第5行和第7行,这里的常用主题是email参数。

作为一个测试,我尝试删除第二个参数和硬编码“[email protected]”到邮件:部分,所以该方法只会采取一个参数paging_id。当我火从Rails的控制台,我得到如下:

irb(main):003:0> PagingMailer.message(33).deliver 
PagingMailer#message: processed outbound mail in 27.4ms 
ArgumentError: wrong number of arguments (given 0, expected 1) 
    from app/mailers/paging_mailer.rb:5:in `message' 
    from app/mailers/paging_mailer.rb:7:in `message' 

我从字面上传递参数的方法和它没有看到它,即使它被作为一个对象传递。

应该指出我的应用程序中有一些其他的邮件程序,它们的配置类似于使用2个参数并且它们正确执行。但是,我正在努力拼凑这个特定的邮件。

不知道我是否错过了一些完全明显的东西,或者这可能是某种Rails错误。

任何帮助,您可以提供非常感谢。

+0

我认为你的问题与SendGrid设置有关。擦除'包括SendGrid'并测试是否有效。 –

+0

@PapayaLabs不,这不是问题。我的其他邮件类使用相同的包含声明和工作就好了。我通过您的请求删除了它,并产生相同的异常。 – nulltek

+0

所以也许在#{@paging.user.username}。我不知道你的寻呼模式如何。我没有看到任何其他问题。 –

回答

2

更改方法“消息”的名称。 ActionMailer :: Base定义了一个名为'message'的attr_internal,所以创建了读写实例方法,并且覆盖它。

相关问题