Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/asp.net-mvc/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby 未定义的方法“最小成本';对于ActiveModel::SecurePassword:模块_Ruby_Ruby On Rails 3.2_Rubygems - Fatal编程技术网

Ruby 未定义的方法“最小成本';对于ActiveModel::SecurePassword:模块

Ruby 未定义的方法“最小成本';对于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 <

我正在关注Michale harlt的ruby on rails教程。一切都很顺利,直到我陷入了这个问题,在给出用户名和密码并单击“登录”按钮后,我得到了一个错误“ActiveModel::SecurePassword:Module的未定义方法'min_cost'”.我从过去两天开始试图解决这个问题,但找不到任何相关的解决方案。 请帮我解决这个问题。提前谢谢。这是我所有的项目相关文件。(我使用的是rails 3.2.16) 如需更多信息,请告诉我

user.rb

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