Ruby on Rails的新手,并且在关注Michael Hartl的教程时遇到了问题。我正在使用Rails 3.2.2和Ruby 1.9.3。这个问题看起来非常类似于提出但未得到回答的另一个问题: Rails Error NoMethodError in 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 gem以及在user.rb中使用has_secure_password方法有关。删除user.rb中对has_secure_password的调用可以消除错误并成功进入注册页面。
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 gem的任何问题。在Gemfile中我有:
gem 'bcrypt-ruby', '3.0.1'
并且gem也在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
有什么想法吗?
答案 0 :(得分:3)
我正在阅读相同的教程并遇到了完全相同的问题。
我的解决方案是重启Web服务器。安装gem之后,我认为需要重新启动Web服务器才能加载它。
贾斯汀
答案 1 :(得分:0)
您是否尝试过'bundle update'命令,如果您在Gemfile中指定,通常捆绑器将处理宝石。如果您想检查宝石依赖性,请检查http://rubygems.org/gems。
如果您正在使用Windows(我知道它很奇怪 - 但我们的一些应用程序仅在Windows中运行)有一些技巧可以安装bcrypt
安装bcrypt的步骤。
1下载Devkit并解压缩
您可以从这里下载http://rubyinstaller.org/downloads/
2将devkit设置为您的jruby文件夹(在我的情况下为C:\ applications \ jruby \ devkit)
3您还需要安装ruby 1.8.7或1.9(有时需要重启系统)
4 CD进入devkit目录
5运行ruby dk.rb init
6打开config.yml并确保列出了您的jruby安装。如果没有,请添加它们。完成后保存并关闭config.yml。
示例: - C:/ applications / jruby
7运行ruby dk.rb install
8 jruby -S gem install bcrypt-ruby
答案 2 :(得分:0)
重新启动Web服务器为我修复了它(在后台运行spork以加快测试的运行)