开发者

cant use has_secure_password, password_digest error

Good evening. I have a problem. i am using has_secure_password and cause of this i have an error undefined methodpassword_digest=' for #`,

but i dont have this method!! Please help, dont know what to do. I read how to fix this problem but it didnt help me(

Here is my User model. Please help if you can.

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


You may have forgotten to make sure your migration backing the user model has a column for password_digest. Make sure the column exists and that it's a string. If it doesn't, create a migration to add the column.


Models having has_secure_password store password in password_digest column instead of password column. In fact password column is not needed.

> 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"
}


I had the same problem, I was following http://www.railstutorial.org/book/modeling_users and my app/Controllers/users_controllers.rb didn't have a method to create the attribute, I also used git to share the working code between portable laptop for the train and larger home, this created the migration file but didnt apply it, my working user controller is below.

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


Hey I'm following RoR too and come into the same problem. The trick here is your bundle exec rake db:migrate fails and therefore the password_digest column hasn't been added into the database. My console complains that database for User already exists. I delete the db/development.sqlite3 manully with "SQLite Browser". After running bundle exec rake db:migrate, every test passes

0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜