2012-02-02 133 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

相關問題