Ruby-on-Rails 重命名的变量测试仍然看到以前的名字

Ruby-on-Rails renamed variables tests still see former names

为了让我的专栏名称更友好,我 运行 进行了以下迁移:

class RenameDigestColumnsOnUserToEncryptedTokens < ActiveRecord::Migration[5.0]
  def change
    rename_column :users, :password_digest, :encrypted_password
    rename_column :users, :activation_digest, :encrypted_activation_token
    rename_column :users, :reset_digest, :encrypted_reset_password_token
  end
end

效果很好,在我的数据库中有效地重命名了列。

我相应地重命名了我可以使用这些名称进行的所有操作,这意味着我的代码中没有任何内容,无论是 Password_digest、activation_digest 还是 reset_digest。

问题是当我 运行 测试时,我仍然收到错误,就好像我没有在项目中重命名它们一样,例如这种错误:

.E

Error:
PasswordResetsTest#test_password_resets:
NoMethodError: undefined method `password_digest' for #<User:0x00563d149684d8>
Did you mean?  password
    app/controllers/password_resets_controller.rb:29:in `update'
    test/integration/password_resets_test.rb:42:in `block in <class:PasswordResetsTest>'


bin/rails test test/integration/password_resets_test.rb:10

password_resets_controller的更新动作代码如下:

def update
    if params[:user][:password].empty?
      @user.errors.add(:password, "can't be empty")
      render 'edit'
    elsif @user.update_attributes(user_params)
      log_in @user
      # to prevent, on a public machine for example, people from pressing the back button and changing
      # the password (and getting logged in to the site) whereas it's always been reset
      @user.update_attribute(:encrypted_reset_password_token, nil)
      flash[:success] = 'Password has been reset.'
      redirect_to @user
    else
      render 'edit'
    end
  end

以及相关的log_in方法:

# Logs in the given user.
  def log_in(user)
    session[:user_id] = user.id
  end

我试过重启spring甚至重启电脑,我都看不出是从哪里来的,电脑怎么还能看到这些名字。

我正在使用 bcrypt gem 生成加密令牌,以前用摘要命名,这是我尝试重命名的那些。

有没有人遇到过这个问题?预先感谢您的帮助。

如果您看到有关 password_digest 列的错误,可能您使用的是活动记录 has_secure_password,它需要该列:http://api.rubyonrails.org/classes/ActiveModel/SecurePassword/ClassMethods.html