не могу использовать has_secure_password, ошибка password_digest - PullRequest
11 голосов
/ 13 октября 2011

Добрый вечер. У меня проблема. я использую 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

Ответы [ 4 ]

26 голосов
/ 20 октября 2011

Возможно, вы забыли убедиться, что в вашей миграции, поддерживающей модель пользователя, есть столбец для password_digest.Убедитесь, что столбец существует и что это строка.Если этого не произойдет, создайте миграцию для добавления столбца.

3 голосов
/ 13 июня 2014

У меня была такая же проблема, я следовал 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
1 голос
/ 13 марта 2018

Модели с has_secure_password сохраняют пароль в столбце password_digest вместо столбца password . На самом деле столбец пароля не нужен.

> 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"
}
1 голос
/ 23 сентября 2012

Эй, я тоже слежу за RoR и сталкиваюсь с той же проблемой.Хитрость в том, что ваш bundle exec rake db:migrate терпит неудачу, и поэтому столбец password_digest не был добавлен в базу данных.Моя консоль жалуется, что база данных для пользователя уже существует .Я удаляю db/development.sqlite3 вручную с помощью «Браузера SQLite».После запуска bundle exec rake db:migrate каждый тест проходит

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...