Rails 5.1邮件编码错误

时间:2017-06-02 22:03:27

标签: ruby-on-rails encoding email-validation

我正在关注Hartl Rails教程v5.0.1并且遇到了一个Mailer测试(大概)需要一个指定的编码。

相关的测试条款(我在任何一行都有类似的错误):

assert_match user.reset_token, mail.body.encoded
assert_match CGI.escape(user.email), mail.body.encoded

产生的错误消息msg(截断):

Failure:    
UserMailerTest#test_password_reset    
[...demo/test/mailers/user_mailer_test.rb:30]:    
Expected /6qyclXtvAeFin0htTK7t7g/ to match # encoding: US-ASCII

请注意我在我的本地仓库中使用Rails 5.1.1。邮件程序模板使用默认编码,无论它们是什么。

错误消息包含电子邮件模板的长字符串;我可以看到“charset = UTF-8”和“Content-Transfer-Encoding:7bit”。

MailerTest文件还检查用户令牌和CGI转义电子邮件地址的相同组合,以查找没有问题的帐户激活测试用例。

有什么建议吗?到目前为止,Hartl教程尚未深入研究编码。

1 个答案:

答案 0 :(得分:0)

问题是mail.body必须是String,但您尚未在password_reset中设置它。

所以,首先设置它:

def password_reset(user)
  @user = user
  @body = "My message body"

  mail to: user.email, subject: "password reset"
end

然后,在模板中使用它。

# password_reset.html.erb
<h1>User#password_reset</h1>
<%= @body %>

# password_reset.text.erb
User#password_reset
<%= @body %>

您会注意到@greeting已被删除,我这样做是因为它不再被使用(您将在@body中添加您的消息)。