2010-10-22 2 views
5

Abbiamo già creato un modello utente all'inizio del progetto, ma ora (diverse migrazioni successive) vorremmo utilizzare la gemma del progetto. È possibile aggiungere un dispositivo se il modello utente e la tabella esistono già? Cioè, è possibile modificare ciò che è già stato fatto, o dobbiamo ricominciare tutto da capo?È possibile aggiungere inventare, se il modello utente esiste già?

risposta

0

L'ho fatto. È un po 'doloroso, ma Devise ne vale la pena. Crea un'app fittizia e fai le migrazioni. Quindi dai un'occhiata a schema.rb e scrivi alcune migrazioni che fanno la stessa cosa al tuo modello utente esistente.

In alternativa è possibile leggere il codice sorgente e scoprire dove sono definiti "database_authenticateable". È necessario iniziare here.

4

Cavert Coder, ma:

(Nota, questo non migra ": con serratura" perché non mi preoccupo quando l'ho scritto Questo include ora: con serratura a causa MattSlay importava più di me fatto :). Inoltre, è necessario migrare le password degli utenti nel campo delle password crittografate. Infine, potrebbe non funzionare per te. Siamo spiacenti)

class AddDevise < ActiveRecord::Migration 
    def self.up 
    null = false 
    default = "" 

    add_column :users, :encrypted_password, :string, :null => null, :default => default, :limit => 128 
    add_column :users, :password_salt, :string 
    add_column :users, :authentication_token, :string 
    add_column :users, :confirmation_token, :string 
    add_column :users, :confirmed_at,   :datetime 
    add_column :users, :confirmation_sent_at, :datetime 
    add_column :users, :reset_password_token, :string 
    add_column :users, :remember_token,  :string 
    add_column :users, :remember_created_at, :datetime 
    add_column :users, :sign_in_count,  :integer, :default => 0 
    add_column :users, :current_sign_in_at, :datetime 
    add_column :users, :last_sign_in_at, :datetime 
    add_column :users, :current_sign_in_ip, :string 
    add_column :users, :last_sign_in_ip, :string 

    #:lockable fields contributed by MattSlay 
    add_column :users, :failed_attempts, :integer, :default => 0 
    add_column :users, :unlock_token, :string 
    add_column :users, :locked_at, :datetime 

    end 

    def self.down 
    remove_column :users, :encrypted_password 
    remove_column :users, :password_salt 
    remove_column :users, :authentication_token 
    remove_column :users, :confirmation_token 
    remove_column :users, :confirmed_at 
    remove_column :users, :confirmation_sent_at 
    remove_column :users, :reset_password_token 
    remove_column :users, :remember_token 
    remove_column :users, :remember_created_at 
    remove_column :users, :sign_in_count 
    remove_column :users, :current_sign_in_at 
    remove_column :users, :last_sign_in_at 
    remove_column :users, :current_sign_in_ip 
    remove_column :users, :last_sign_in_ip 
    remove_column :users, :failed_attempts 
    remove_column :users, :unlock_token 
    remove_column :users, :locked_at 
    end 
end 
+0

Ha funzionato per me! Ora, di che cosa si tratta: bloccabile? Guardo la migrazione di Devise User e vedo solo i campi che hai elencato. Dove potrei imparare di più su questo: cosa bloccabile? Mi piacerebbe implementare lo schema completo di Devise User. – MattSlay

+0

Ah, penso di aver trovato i campi obbligatori: bloccabili. Li ho pubblicati in una risposta separata di seguito. – MattSlay

+0

Ah, fantastico. L'ho integrato con l'unico grande file di schema sopra ora. Grazie. – Aquarion

3

In aggiunta alla lista che Aquarion fornito, penso di aver trovato i tre campi necessari se si desidera implementare il:. 'Opzione serratura sul modello User:

add_column :users, :failed_attempts, :integer, :default => 0 
add_column :users, :unlock_token, :string 
add_column :users, :locked_at, :datetime