【问题标题】:Rails Tutorial (M. Hartl) - I am receiving two errors and I need assistanceRails 教程 (M. Hartl) - 我收到两个错误,我需要帮助
【发布时间】:2016-02-03 19:36:04
【问题描述】:

我的 Ruby on Rails 应用程序出现 2 个错误。我正在尝试完成 Rails 教程中的示例应用程序。

这是我的错误:

1) Error:
UserMailerTest#test_account_activation:
ArgumentError: wrong number of arguments (1 for 0)    app/mailers/user_mailer.rb:3:in `account_activation'     test/mailers/user_mailer_test.rb:9:in `block in <class:UserMailerTest>'

2) Failure:
UserMailerTest#test_password_reset [/home/andy/Ruby_Projects/sam
ple_app/test/mailers/user_mailer_test.rb:21]: Expected: ["from@example.com"] Actual: ["noreply@example.com"]

这是我针对这两个问题的代码:

require 'test_helper'

class UserMailerTest < ActionMailer::TestCase

  test "account_activation" do
    user = users(:andy)
    user.activation_token = User.new_token
    mail = UserMailer.account_activation(user)
    assert_equal "Account activation", mail.subject
    assert_equal [user.email], mail.to
    assert_equal ["noreply@example.com"], mail.from
    assert_match user.name,               mail.body.encoded
    assert_match user.activation_token,   mail.body.encoded
    assert_match CGI::escape(user.email), mail.body.encoded
  end

  test "password_reset" do
    mail = UserMailer.password_reset
    assert_equal "Password reset", mail.subject
    assert_equal ["to@example.org"], mail.to
    assert_equal ["from@example.com"], mail.from
    assert_match "Hi", mail.body.encoded
  end
end

这里是 UserMailer.rb:

class UserMailer < ApplicationMailer

  def account_activation
    user = user
    mail to: user.email, subject: "Account activation"
  end

  def password_reset
    @greeting = "Hi"
    mail to: "to@example.org"
  end
end

我一直在按照教程检查我的代码与教程中的内容,但仍然无法找到我做错了什么。如果您需要更多信息,请告诉我。我会尽力提供的。

【问题讨论】:

  • 您可能会发现this question and answer 很有帮助。
  • 关于发帖的一些反馈:今后,请确保您的代码格式正确并添加 railstutorial.org 标签。告诉我们你在哪一章也很有用,也没有像UserMailer.rb这样的文件。第一段代码所在的文件名是什么?
  • 感谢您的评论,我会记住这一点。我在第 10 章。它应该是 user_mailer.rb,我只是误输入了它。对不起。

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


【解决方案1】:

您没有为account_activation 方法定义参数。您需要添加一个user 参数:

def account_activation(user)
  @user = user
  mail to: user.email, subject: "Account activation"
end

【讨论】:

  • 感谢您的建议,我已经解决了第一个问题,但仍然无法解决第二个错误消息。
  • 如果您想覆盖默认发件人地址,请在邮件行中添加 from: 'from@example.com' 以及 to: 和 subject:。
猜你喜欢
  • 1970-01-01
  • 2016-02-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-01-04
  • 1970-01-01
相关资源
最近更新 更多