2012-02-02 12 views
15

Sto usando Rails 3. Esiste un possibile duplicato here. Ma non ha risolto il mio problema, né ha fatto alcuna altra soluzione.variabile locale indefinita o metodo `confirmed_at 'per #User

La mia migrazione è la seguente

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

devo devise :confirmable aggiunti User modello.

Il mio rake db:migrate non produce output. e la mia pagina di registrazione dà l'errore:

undefined local variable or method 'confirmed_at' for #User 

Qualcuno ha un indizio?

+2

si deve sapere che il gli helper di migrazione (come 't.confirmable') in idea sono deprecati a partire da versione 2.0. D'ora in poi dovresti [aggiungere manualmente le colonne di sviluppo] (https://github.com/plataformatec/devise/wiki/How-To:-Upgrade-to-Devise-2.0-migration-schema-style) –

risposta

21

Ok. L'ho risolto. La migrazione è obsoleta. Genera nuova migrazione con lo stesso codice ma un altro nome.

1.Run comando:

rails g migration add_confirmable_to_devise_v1 

2.In il file di migrazione:

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

sto usando Mongoid e ottenuto questo stesso errore . Ho aggiunto questi campi e ho ottenuto rspec di diventare verde sui miei 16 esempi.

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

Nota per me. Qualcuno potrebbe trovare utile: Ciò di cui abbiamo bisogno è 2 comandi di seguito:

rake db:migrate:reset 
    rake db:reset 

Voila! Funziona!

+1

Cosa sono 'db: reset' e' rake db: migrate: reset'? 'rake -D db: reset' o' rake -D db: migrate: reset' non mostra nulla ... – Green

18

Come dell'ultima disposizione testamentaria, è solo bisogno di rimuovere i commenti dalle seguenti linee di migrazione degli utenti testamentaria .. (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 
14

di legare @ DevDude di risponde con la risposta accettata - se si dispone già di un modello esistente Users a cui è necessario aggiungere confermabile, il codice di migrazione completa per la versione di corrente Devise come di 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

Sì, questa è la risposta corretta. Infatti, quando si genera inizialmente una migrazione ideata, questa verrà commentata. – Donato

Problemi correlati