Ответ 1
Добавьте bcrypt-ruby в свой Gemfile, как указано ниже:
gem 'bcrypt-ruby', '3.1.2'
затем запустите пакетное обновление из корневого каталога проекта и установить пакет
Когда я узнаю "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
Добавьте bcrypt-ruby в свой Gemfile, как указано ниже:
gem 'bcrypt-ruby', '3.1.2'
затем запустите пакетное обновление из корневого каталога проекта и установить пакет
Когда я увидел "Ruby On Rails Tutorial", я встретил ту же проблему, Я решил его установить Gemfile из:
gem 'bcrypt-ruby', '3.0.1'
в
gem 'bcrypt-ruby', '3.1.2'
затем выполните:
bundle install
Также, для учебника/книги и с теми же проблемами, я использовал 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, это не сработало.
Я думаю, что вы изучаете рельсы из учебника. Если вы просто хотите продолжить и не потратили много времени на правильное исправление, вы можете просто использовать стоимость, как говорят 10, вместо вызова метода BCrypt::Engine.cost
 ..
Итак, замените
cost = BCrypt::Engine.cost
с
cost = 10
Это значение при использовании будет занимать менее 200 мс для вычисления, и это должно быть хорошо.
Протестировано на mac:
Включите это в свой gemfile:
gem 'bcrypt', '3.1.11'
run:
xcode-select --install
затем запустите: bundle install
Что это.
Лучшее из lucks