undefined local variable or method `confirmed_at&#

2020-05-19 04:07发布

I am using Rails 3. There is a possible duplicate here. But it did not solve my problem, neither did any other solution.

My migration is as follows

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

I do have devise :confirmable added in User model.

My rake db:migrate gives no output. and my sign up page gives the error:

undefined local variable or method 'confirmed_at' for #User

Anybody has a clue?

5条回答
Explosion°爆炸
2楼-- · 2020-05-19 04:20

I'm using Mongoid and got this same error. I added these fields and got rspec to go green on my 16 examples.

field :confirmation_token,   :type => String
field :confirmed_at,         :type => Time
field :confirmation_sent_at, :type => Time
field :unconfirmed_email,    :type => String
查看更多
冷血范
3楼-- · 2020-05-19 04:26

Note for myself. Someone might find it helpful: What we need is 2 commands below:

    rake db:migrate:reset 
    rake db:reset

Voila! It works!

查看更多
家丑人穷心不美
4楼-- · 2020-05-19 04:33

Ok. I solved it. The migration is outdated. Generate new migration with same code but another name.

1.Run command:

rails g migration add_confirmable_to_devise_v1

2.In the migration file:

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
查看更多
时光不老,我们不散
5楼-- · 2020-05-19 04:38

To tie in @DevDude's answer with the accepted answer - if you already have an existing Users model to which you need to add confirmable, the full migration code for the version of Devise current as of 4/14 is:

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
查看更多
唯我独甜
6楼-- · 2020-05-19 04:42

As of the latest devise, you just need to remove comments from the following lines on the devise users migration.. (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
查看更多
登录 后发表回答