Undefined локальная переменная или метод `confirm_at 'для #User

Я использую Rails 3. Здесь возможно дублировать . Но это не решило мою проблему, и не было другого решения.

Моя миграция выглядит следующим образом

class AddConfirmableToDevise < ActiveRecord::Migration
  def change
    change_table(:users) do |t| 
      t.confirmable 
    end
    add_index  :users, :confirmation_token, :unique => true 
  end
end

У меня есть devise :confirmable, добавленный в модель User.

My rake db:migrate не выводит результат. и моя страница регистрации показывает ошибку:

undefined local variable or method 'confirmed_at' for #User

У кого-нибудь есть ключ?

Ответы

Ответ 1

Ok. Я решил это. Миграция устарела. Создайте новую миграцию с тем же кодом, но с другим именем.

Команда 1.Run:

rails g migration add_confirmable_to_devise_v1

2.В файле миграции:

class AddConfirmableToDeviseV1 < ActiveRecord::Migration
  def change
    change_table(:users) do |t| 
      t.confirmable 
    end
    add_index  :users, :confirmation_token, :unique => true 
  end
end

3.Then

rake db:migrate

Ответ 2

Как и в случае с последним приложением, вам просто нужно удалить комментарии из следующих строк при миграции пользователей. (2013....._ devise_create_users.rb)

  # Confirmable
  t.string   :confirmation_token
  t.datetime :confirmed_at
  t.datetime :confirmation_sent_at
  t.string   :unconfirmed_email # Only if using reconfirmable

Ответ 3

Чтобы связать ответ @DevDude с принятым ответом - если у вас уже есть существующая модель Users, к которой вам нужно добавить подтверждение, полный код перехода для версии Current Devise начиная с 4/14:

class AddConfirmableToDeviseV1 < ActiveRecord::Migration
  def change
    change_table(:users) do |t|
       # Confirmable
       t.string   :confirmation_token
       t.datetime :confirmed_at
       t.datetime :confirmation_sent_at
       t.string   :unconfirmed_email # Only if using reconfirmable
     end
     add_index  :users, :confirmation_token, :unique => true 
   end
end

Ответ 4

Заметьте для себя. Кто-то может найти это полезным: Нам нужны две команды ниже:

    rake db:migrate:reset 
    rake db:reset

Voila! Он работает!

Ответ 5

Я использую Mongoid и получил ту же ошибку. Я добавил эти поля и получил rspec для использования на 16 примерах.

field :confirmation_token,   :type => String
field :confirmed_at,         :type => Time
field :confirmation_sent_at, :type => Time
field :unconfirmed_email,    :type => String