晚上好。我有个问题。我正在使用has_secure_password
造成这种情况我对#`,
undefined method
password_digest ='
但我没有这种方法!!请帮忙,不知道该怎么办。我读了如何解决这个问题,但它没有帮助我(
这是我的用户模型。如果可以,请帮忙。
class User < ActiveRecord::Base
attr_accessible :email, :password, :password_confirmation
has_secure_password
validates_presence_of :password, :on => :create
before_create { generate_token(:auth_token) }
def send_password_reset
generate_token(:password_reset_token)
self.password_reset_sent_at = Time.zone.now
save!
UserMailer.password_reset(self).deliver
end
def generate_token(column)
begin
self[column] = SecureRandom.urlsafe_base64
end while User.exists?(column => self[column])
end
end
答案 0 :(得分:26)
您可能忘记确保支持用户模型的迁移有一个password_digest列。确保列存在且它是一个字符串。如果没有,请创建迁移以添加列。
答案 1 :(得分:3)
我有同样的问题,我正在关注http://www.railstutorial.org/book/modeling_users
我的app/Controllers/users_controllers.rb
没有创建属性的方法,我还使用git来共享便携式笔记本电脑和大型家庭之间的工作代码,这创建了迁移文件,但没有应用它,我的工作用户控制器如下。
class UsersController < ApplicationController
def new
attr_accessor :name, :email, :password
def initialize(attributes = {})
@name = attributes[:name]
@email = attributes[:email]
@password = attributes[:password]
end
def formatted_email
"#{@name} <#{@email}>"
end
end
答案 2 :(得分:1)
嘿,我也在关注RoR并遇到同样的问题。这里的诀窍是bundle exec rake db:migrate
失败,因此password_digest
列尚未添加到数据库中。我的控制台抱怨用户的数据库已存在。我用“SQLite浏览器”删除db/development.sqlite3
manully。运行bundle exec rake db:migrate
后,每次测试都通过
答案 3 :(得分:1)
将has_secure_password
密码存储在 password_digest 列而不是密码列中的模型。
实际上不需要密码列。
> u=User.create!(email: 'user@gmail.com', password: '12345678')
> u
#<User:0x007fc794be9278> {
:id => 1,
:email => "user@gmail.com",
:password_digest => "$2a$10$S82GVFR..yO9jihgIoeMj.7dNMWtbCUZpWDKvH0tyMs1SYlfdefmW"
}