ruby-on-rails - 为什么在保存对象后使用 'reload' 方法? (Hartl Rails Tut 6.30)

标签 ruby-on-rails methods ruby-on-rails-4 railstutorial.org

我正在编写 Hartl 的 Rails 4 教程第 6 章的练习。第一个练习测试以确保用户电子邮件地址正确小写:

require 'spec_helper'

describe User do
  .
  .
  .
  describe "email address with mixed case" do
    let(:mixed_case_email) { "Foo@ExAMPle.CoM" }

    it "should be saved as all lower-case" do
      @user.email = mixed_case_email
      @user.save
      expect(@user.reload.email).to eq mixed_case_email.downcase
    end
  end
  .
  .
  .
end

我不明白的是为什么这里需要“重新加载”方法。曾经@user.email设置为mixed_case_email的内容和 已保存 ,不是 @user.reload.email@user.email同样的事情?我把 reload 方法拿出来尝试一下,它似乎没有改变任何测试。

我在这里缺少什么?

最佳答案

在这种情况下是的 @user.reload.email@user.email是一样的。但最好使用 @user.reload.email而不是 @user.email要检查数据库中保存的内容,我的意思是您不知道您或某人是否在 after_save 中添加了一些代码来更改它的值,那么它不会对您的测试产生影响。

编辑:
而且您正在检查的是保存在数据库中的内容,所以 @user.reload.email完全反射(reflect)数据库中保存的内容然后 @user.email

关于ruby-on-rails - 为什么在保存对象后使用 'reload' 方法? (Hartl Rails Tut 6.30),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22259641/

相关文章:

ruby-on-rails - 从 Rails 的任何地方访问 "session key"cookie 名称

ruby-on-rails - 重定向中的 Flash 消息不起作用

Java:从 ArrayList 引用数组作为方法输入

ruby-on-rails - 命名空间子域 Controller 和自定义布局

ruby-on-rails - 如何加密必须传输的 PIN?

ruby-on-rails - Ruby on Rails 3.2.3 在 rake db :migrate (MySQL db) 之后不创建外键

javascript - 使用 AJAX 比较 Ruby 中的变量,然后相应地渲染 View

java - 如何从匿名类访问私有(private)方法?

ruby - 如何将传入的参数传递给另一个方法?

ruby-on-rails - 每个用户在 Rails 中使用片段缓存