2012-02-02 135 views
15

我正在使用Rails 3.有一个可能的重复here。但它没有解决我的问题,也没有解决任何其他问题。未定义的局部变量或方法`confirmed_at'为#用户

我的迁移是如下

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

我确实有User模型添加devise :confirmable

我的rake db:migrate没有输出。和我的注册页面给出错误:

undefined local variable or method 'confirmed_at' for #User 

任何人都有线索?

+2

你应该知道的是,在设计中的迁移助手(如't.confirmable')已被弃用版本2.0。从现在开始,你应该[手动添加设计列](https://github.com/plataformatec/devise/wiki/How-To:-Upgrade-to-Devise-2.0-migration-schema-style) – 2012-02-02 08:02:59

回答

21

好的。我解决了它。迁移已过时。使用相同的代码生成新迁移,但使用其他名称。

1.Run命令:

rails g migration add_confirmable_to_devise_v1 

2.In迁移文件:

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 
4

我使用Mongoid,得到了同样的错误。我添加了这些字段,并在我的16个示例中获得了rspec绿色。

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

请注意我自己。有人可能会发现它有用: 我们需要的是下面两个命令:

rake db:migrate:reset 
    rake db:reset 

瞧!有用!

+1

什么是'db:reset'和'rake db:migrate:reset'? 'rake -D db:reset'或'rake -D db:migrate:reset' does not show any ... – Green 2013-06-30 17:51:08

18

由于采用了最新色器件,只需从上色器件的用户迁移以下行删除注释。(20​​13 ....._ 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 
14

为配合@ DevDude的与接受的答案回答 - 如果你已经有一个现成Users模型,你需要添加可确定的到,对于版本设计电流为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 
+0

是的,这是正确的答案。事实上,当您最初生成设计移植时,这将被注释掉。 – Donato 2016-08-23 18:14:04

相关问题