Впервые в Ruby on Rails и возникли проблемы при следовании руководству Майкла Хартла. Я использую Rails 3.2.2 с Ruby 1.9.3.Эта проблема выглядит очень похоже на другой вопрос, который был поднят, но остался без ответа: Ошибка Rails NoMethodError в UsersController # show error
При попытке добавить нового пользователя через / signup появляется следующая ошибка
Gem::LoadError in UsersController#new
bcrypt-ruby is not part of the bundle. Add it to Gemfile.
При перезагрузке страницы выдается ошибка:
NoMethodError in UsersController#new
undefined method `key?' for nil:NilClass
Проблема, похоже, связана с включением гема bcrypt-ruby и использованием метода has_secure_password в пользователе.rb.Удаление вызова has_secure_password в user.rb избавляет от ошибки и успешно переходит на страницу регистрации.
user.rb:
# == Schema Information
#
# Table name: users
#
# id :integer not null, primary key
# name :string(255)
# email :string(255)
# created_at :datetime not null
# updated_at :datetime not null
# password_digest :string(255)
#
class User < ActiveRecord::Base
attr_accessible :name, :email, :password, :password_confirmation
has_secure_password
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 }
validates :password, length: { minimum: 6}
end
users_controller.rb:
class UsersController < ApplicationController
def new
@user = User.new
end
def create
@user = User.new(params[:user])
if @user.save
flash[:success] = "Welcome!"
redirect_to @user
else
render 'new'
end
end
end
Однако я не могу найти что-то не так с включением гема bcrypt-ruby.В Gemfile у меня есть:
gem 'bcrypt-ruby', '3.0.1'
, и этот камень также был создан в Gemfile.lock:
DEPENDENCIES
annotate (~> 2.4.1.beta)
bcrypt-ruby (= 3.0.1)
Я также добавил password_digest в базу данных посредством миграции:
class AddPasswordDigestToUsers < ActiveRecord::Migration
def change
add_column :users, :password_digest, :string
end
end
Есть идеи?