(Rails): NoMethodError: undefined стоимость метода для BCrypt:: Engine: Class

Когда я узнаю "Ruby on Rails Tutorial", и я хочу создать пользователя на консоли:

irb(main):001:0> User.create(name:"gsky",email:"[email protected]",
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+\-.][email protected][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

Ответ 1

Добавьте bcrypt-ruby в свой Gemfile, как указано ниже:

     gem 'bcrypt-ruby', '3.1.2'

затем запустите пакетное обновление из корневого каталога проекта и установить пакет

Ответ 2

Когда я увидел "Ruby On Rails Tutorial", я встретил ту же проблему, Я решил его установить Gemfile из:

gem 'bcrypt-ruby', '3.0.1' 

в

gem 'bcrypt-ruby', '3.1.2' 

затем выполните:

bundle install

Ответ 3

Также, для учебника/книги и с теми же проблемами, я использовал gem 'bcrypt-ruby', '~ > 3.0.0' из-за проблем с установкой пакета. Пройдя через secure_password.rb, проблема была в BCrypt:: Engine.cost, этот метод на самом деле не существует.

Я поменял свой драгоценный камень на gem 'bcrypt-ruby', '~ > 3.1.0', который установил bcrypt 3.1.7. Вызвали предупреждающее сообщение о переименовании драгоценного камня и изменили его на gem 'bcrypt', '~ > 3.1.0' (эта часть не должна иметь значения). После установки пакета я смог увидеть реализацию Bcrypt:: Engine.cost через мою IDE, и я смог сделать моего пользователя в rails c.

Я хочу добавить, что добавление ActiveModel:: SecurePassword.min_cost = true в test.rb позволило мне создавать новых пользователей, если я запускал rails c в тестовой среде, но когда я добавил ту же строку в development.rb, это не сработало.

Ответ 4

Я думаю, что вы изучаете рельсы из учебника. Если вы просто хотите продолжить и не потратили много времени на правильное исправление, вы можете просто использовать стоимость, как говорят 10, вместо вызова метода BCrypt::Engine.cost &nbsp..

Итак, замените

cost = BCrypt::Engine.cost

с

cost = 10

Это значение при использовании будет занимать менее 200 мс для вычисления, и это должно быть хорошо.

Ответ 5

Протестировано на mac:

Включите это в свой gemfile:

gem 'bcrypt', '3.1.11'

run:

xcode-select --install

затем запустите: bundle install

Что это.

Лучшее из lucks