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
为了让我的专栏名称更友好,我 运行 进行了以下迁移:
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