Rails中的ArgumentError :: MailersController#preview(错误的参数个数(1表示0))

时间:2014-12-23 13:00:36

标签: ruby-on-rails-4 actionmailer railstutorial.org

我正在研究Rails教程的第10章。我已跳过帐户激活并实施了密码重置邮件程序。这是代码:user_mailer_preview.rb

# Preview all emails at http://localhost:3000/rails/mailers/user_mailer
class UserMailerPreview < ActionMailer::Preview

  # Preview this email at
  # http://localhost:3000/rails/mailers/user_mailer/password_reset
  def password_reset
    user = User.first
    user.reset_token = User.new_token
    UserMailer.password_reset(user)
  end
end

以下是用户邮件程序本身的代码:

class UserMailer < ActionMailer::Base
  default from: "from@example.com"

  # Subject can be set in your I18n file at config/locales/en.yml
  # with the following lookup:
  #
  #   en.user_mailer.password_reset.subject
  #
  def password_reset
    @greeting = "Hi"

    mail to: "to@example.org"
  end
end

当我去http://localhost:3000/rails/mailers/user_mailer/password_reset时,我正在

ArgumentError in Mailer

我做错了什么?

2 个答案:

答案 0 :(得分:3)

您正在呼叫UserMailer.password_reset(user)并传递用户

但是你的password_reset方法没有参数。因此,您需要更改密码注册以获取用户(并使用它执行某些操作)

def password_reset(user)
   #do something with the user, such as send to their email address  
   @greeting = "Hi"
   mail to: user.email 
end

或在没有用户的情况下将您的通话调整为UserMailer.password_reset

答案 1 :(得分:0)

对于因为方法需要参数但没有提供任何参数而到达这里的任何人,您可以通过更改默认预览来解决此问题,以便为您提供给邮件程序方法的参数提供一些默认数据。

代码here

有很好的解释