Rails 5.1 邮件程序错误的参数数量给定 0 预期 2
Rails 5.1 mailer wrong number of arguments given 0 expected 2
我正在 Ruby 2.4.1 中开发 Rails 5.1.2 应用程序。我正在创建一个简单的邮件程序,如下所示 class:
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
class 中的 message
方法采用 paging_id
(整数)参数,并传递电子邮件地址的第二个参数(字符串) .最初我用一个 sidekiq worker 解雇了它并且它不会提供错误数量的参数给定 0 expected 2 exception.
所以我启动了一个 rails 控制台并尝试做一个简单的测试,以防万一。
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
堆栈跟踪指向消息方法中的第 5 行和第 7 行,这里的共同主题是电子邮件参数。
作为测试,我尝试删除第二个参数并将 "john@domain.com" 硬编码到 mail to: 部分,这样该方法将只接受一个参数 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 错误。
非常感谢您提供的任何帮助。
更改方法的名称'message'。 ActionMailer::Base 定义了一个名为 'message' 的 attr_internal,因此创建了读取和写入实例方法并且您正在覆盖它。
我正在 Ruby 2.4.1 中开发 Rails 5.1.2 应用程序。我正在创建一个简单的邮件程序,如下所示 class:
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
class 中的 message
方法采用 paging_id
(整数)参数,并传递电子邮件地址的第二个参数(字符串) .最初我用一个 sidekiq worker 解雇了它并且它不会提供错误数量的参数给定 0 expected 2 exception.
所以我启动了一个 rails 控制台并尝试做一个简单的测试,以防万一。
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
堆栈跟踪指向消息方法中的第 5 行和第 7 行,这里的共同主题是电子邮件参数。
作为测试,我尝试删除第二个参数并将 "john@domain.com" 硬编码到 mail to: 部分,这样该方法将只接受一个参数 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 错误。
非常感谢您提供的任何帮助。
更改方法的名称'message'。 ActionMailer::Base 定义了一个名为 'message' 的 attr_internal,因此创建了读取和写入实例方法并且您正在覆盖它。