【问题标题】:ArgumentError in Rails::MailersController#preview (wrong number of arguments (1 for 0))Rails::MailersController#preview 中的 ArgumentError(参数数量错误(1 代表 0))
【发布时间】:2014-12-23 13:00:35
【问题描述】:

我正在编写 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时,我得到了

我做错了什么?

【问题讨论】:

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


    【解决方案1】:

    您正在调用UserMailer.password_reset(user) 并传入用户

    但是您的 password_reset 方法不带参数。所以要么你需要改变你的 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。

    【讨论】:

      【解决方案2】:

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

      代码here有一个精彩的解释

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2016-03-02
        • 2011-07-05
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2016-03-02
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多