当我学习"Ruby on Rails教程“时,我想在控制台上创建一个用户:
irb(main):001:0> User.create(name:"gsky",email:"k@q.com",
irb(main):002:1* password:"aaaaaa",password_confirmation:"aaaaaa")然后,我得到了以下错误消息:
NoMethodError: undefined method cost' for BCrypt::Engine:Class
from D:/RailsInstaller/Ruby2.0.0/lib/ruby/gems/2.0.0/gems/activemodel-4.
0.2/lib/active_model/secure_password.rb:104:inpassword='
from D:/RailsInstaller/Ruby2.0.0/lib/ruby/gems/2.0.0/gems/activerecord-4
.0.2/lib/active_record/attribute_assignment.rb:42:in public_send'这是用户模型:
class User < ActiveRecord::Base
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,
format: { with: VALID_EMAIL_REGEX },
uniqueness: { case_sensitive: false }
has_secure_password
validates :password, length: { minimum: 6 }
end发布于 2014-02-18 21:23:22
将bcrypt-ruby添加到Gemfile中,如下所示:
gem 'bcrypt-ruby', '3.1.2'然后从项目根目录运行包更新,并运行包安装
发布于 2014-09-22 01:38:30
当我看到"Ruby On Rails教程“时,我遇到了同样的问题,我通过设置Gemfile来解决它:
gem 'bcrypt-ruby', '3.0.1' 至:
gem 'bcrypt-ruby', '3.1.2' 然后运行:
bundle install发布于 2014-04-21 06:04:16
同样的教程/书也有同样的问题,我使用gem 'bcrypt-ruby','~> 3.0.0‘,因为捆绑包安装有问题。在通过secure_password.rb之后,问题出现在BCrypt::Engine.cost中,这个方法实际上并不存在。
我把我的gem改成了' bcrypt -ruby','~> 3.1.0‘,它安装了bcrypt3.1.7。我看到了一条关于gem被重命名的警告消息,并将其更改为gem 'bcrypt','~> 3.1.0‘(这部分不重要)。完成包安装后,我能够通过我的集成开发环境查看Bcrypt::Engine.cost的实现,并且我能够让我的用户使用rails c。
我想补充的是,如果我在测试环境中运行rails c,在test.rb中添加ActiveModel::SecurePassword.min_cost = true可以让我创建新用户,但是当我在development.rb中添加相同的行时,它不起作用。
https://stackoverflow.com/questions/21853579
复制相似问题