Rails 5.1 mailer错误的参数数量给出0预期2

时间:2017-08-02 23:18:55

标签: ruby-on-rails ruby ruby-on-rails-3 ruby-on-rails-4 actionmailer

我正在使用Ruby 2.4.1中的Rails 5.1.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

message类中的PagingMailer方法接受paging_id(整数)的参数,并传递电子邮件地址的第二个参数(字符串)。最初我用sidekiq工作者解雇了它,并且如果给出0预期的2异常,它就不会提供错误数量的参数。

所以我启动了一个rails控制台并试图进行一个简单的测试,为了以防万一,将sidekiq放在一边。

Loading development environment (Rails 5.1.2)
irb(main):001:0> PagingMailer.message(33, "john@domain.com").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指向message方法中的第5行和第7行,其中常见主题是电子邮件参数。

作为测试我尝试删除第二个参数并硬编码&#34; john@domain.com" to mail to:part所以该方法只接受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错误。

非常感谢您提供的任何帮助。

1 个答案:

答案 0 :(得分:3)

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