Ruby 未定义的方法“最小成本';对于ActiveModel::SecurePassword:模块
我正在关注Michale harlt的ruby on rails教程。一切都很顺利,直到我陷入了这个问题,在给出用户名和密码并单击“登录”按钮后,我得到了一个错误“ActiveModel::SecurePassword:Module的未定义方法'min_cost'”.我从过去两天开始试图解决这个问题,但找不到任何相关的解决方案。 请帮我解决这个问题。提前谢谢。这是我所有的项目相关文件。(我使用的是rails 3.2.16) 如需更多信息,请告诉我 user.rbRuby 未定义的方法“最小成本';对于ActiveModel::SecurePassword:模块,ruby,ruby-on-rails-3.2,rubygems,Ruby,Ruby On Rails 3.2,Rubygems,我正在关注Michale harlt的ruby on rails教程。一切都很顺利,直到我陷入了这个问题,在给出用户名和密码并单击“登录”按钮后,我得到了一个错误“ActiveModel::SecurePassword:Module的未定义方法'min_cost'”.我从过去两天开始试图解决这个问题,但找不到任何相关的解决方案。 请帮我解决这个问题。提前谢谢。这是我所有的项目相关文件。(我使用的是rails 3.2.16) 如需更多信息,请告诉我 user.rb class User <
class User < ActiveRecord::Base
attr_accessor :remember_token
before_save { self.email = email.downcase }
validates :name, presence: true, length: { maximum: 50 }
VALID_EMAIL_REGEX = /\A[\w+\-.]+@[a-z\d\-.]+\.[a-z]+\z/i
validates :email, presence: true, length: { maximum: 255 },
format: { with: VALID_EMAIL_REGEX },
uniqueness: { case_sensitive: false }
has_secure_password
validates :password, length: { minimum: 6 }
# Returns the hash digest of the given string.
def User.digest(string)
cost = ActiveModel::SecurePassword.min_cost ? BCrypt::Engine::MIN_COST :
BCrypt::Engine.cost
BCrypt::Password.create(string, cost: cost)
end
# Returns a random token.
def User.new_token
SecureRandom.urlsafe_base64
end
# Remembers a user in the database for use in persistent sessions.
def remember
self.remember_token = User.new_token
update_attribute(:remember_digest, User.digest(remember_token))
end
# Returns true if the given token matches the digest.
def authenticated?(remember_token)
BCrypt::Password.new(remember_digest).is_password?(remember_token)
end
end
会话\u controller.rb
class SessionsController < ApplicationController
def new
end
def create
user = User.find_by_email(params[:session][:email].downcase)
if user && user.authenticate(params[:session][:password])
log_in user
remember user
redirect_to user
else
flash.now[:danger] = 'Invalid email/password combination'
render 'new'
end
end
def destroy
log_out
redirect_to home_path
end
end
应用程序跟踪
app/models/user.rb:14:in `digest'
app/models/user.rb:27:in `remember'
app/helpers/sessions_helper.rb:10:in `remember'
app/controllers/sessions_controller.rb:10:in `create'
据我记忆所及,出现在rails4(或rails3>3.2.16)中
由于您只是在学习,我的建议是不要专注于解决此特定错误,而应将有问题的行替换为:
cost = BCrypt::Engine::MIN_COST
甚至
cost = 10
再往前走。无论您是否仍要修复此问题,您都应该将rails升级到4(或此方法引入的任何版本)。感谢mudasabwa:)它成功了。你能告诉我升级到rails应该遵循哪些步骤吗4要升级到rails 4,你应该遵循两个步骤:用谷歌搜索“升级到rails 4”,然后按照说明进行操作。
cost = BCrypt::Engine::MIN_COST
cost = 10