我们最近将我们的代码库从Ruby 2.7.x和rails 5.2.x迁移到了Ruby 3.2.2和rails 6.1.7.3.以前,我们的postman 是这样定义的:
class ApplicationMailer < ActionMailer::Base
...
end
class MyMailer < ApplicationMailer
def custom(user: , timestamp: Time.now)
@user = user
@timestamp = timestamp
end
end
我们会发送这样的邮箱:MyMailer.custom(user: @myuser).deliver_now
封.更新后,它现在返回ArgumentError: wrong number of arguments (given 1, expected 0; required keyword: user) (ArgumentError)
.
我们发现,我们应该在参数散列中传递参数并从那里读取,但与我们之前的解决方案相比,这似乎相当麻烦和不雅致.所以我的问题是,
- 是什么Ruby(或Rails)代码更改导致我们之前的解决方案失败了?
- 有没有办法仍然可以用自定义关键字参数定义Mailer方法?
这显然是我们应该传递参数的方式:
class MyMailer < ApplicationMailer
def custom
@user = params[:user]
@timestamp = params[:timestamp] || Time.now
end
end