2010-10-22 10 views
5

Już stworzyliśmy model użytkownika na początku projektu, ale teraz (kilka późniejszych migracji) chcielibyśmy użyć gem devisera. Czy możliwe jest dodanie projektu, jeśli model użytkownika i tabela już istnieją? To znaczy, czy można zmienić to, co już zostało zrobione, czy musimy zacząć wszystko od początku?Czy można dodać programowanie, jeśli model użytkownika już istnieje?

Odpowiedz

0

Zrobiłem to. To trochę uciążliwe, ale Devise jest tego warte. Zrób fałszywą aplikację i wykonuj migrację. Następnie spójrz na schemat schema.rb i napisz kilka migracji, które robią to samo z istniejącym modelem użytkownika.

Alternatywnie możesz przeczytać źródło i dowiedzieć się, gdzie zdefiniowano rzeczy "database_authenticateable". Powinieneś zacząć here.

4

Cavert Coder, ale:

(Uwaga, to nie migrować „: zamykane”, bo nie dbają o to, gdy to pisałem Obejmuje to teraz: zamykane ponieważ MattSlay zależało bardziej niż ja zrobił :). Musisz również przeprowadzić migrację haseł użytkowników do pola zaszyfrowanych haseł. W końcu może nie działać dla ciebie. Niestety)

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

Pracował dla mnie! O czym jest ta część: blokowanie? Patrzę na migrację Devise User i widzę tylko te pola, które wymieniłeś. Gdzie mogę dowiedzieć się więcej na ten temat: Zamykane rzeczy? Chciałbym wdrożyć pełny schemat Devise User. – MattSlay

+0

Ahh, myślę, że znalazłem wymagane: zamykane pola. Wysłałem je w osobnej odpowiedzi poniżej. – MattSlay

+0

Ach, fajnie. Zintegrowaliśmy to z jednym dużym plikiem schematu powyżej. Dziękuję Ci. – Aquarion

3

Oprócz listy Aquarion przewidzianym, myślę Znalazłem trzy pola, których potrzebujesz, jeśli chcesz, aby wdrożyć. Zamykane opcję w modelu użytkownika:

add_column :users, :failed_attempts, :integer, :default => 0 
add_column :users, :unlock_token, :string 
add_column :users, :locked_at, :datetime 
Powiązane problemy