8

Ich frage mich, wie kann ich eine vorhandene Datenbank mit einem anderen Benutzer Gerät hinzufügen. Hier habe ich bereits ein Kundenmodell definiert und möchte es ändern, damit Device arbeiten kann.Devise Installation von vorhandenem Modell/Datenbank

Ich habe eine neue Migration erstellt und eingefügt hat der Code

class AddDeviseToCustomer < ActiveRecord::Migration 
    def change 
    change_table :customers do |t| 
     #t.database_authenticatable 
     t.string :encrypted_password, :null => false, :default => '', :limit => 128 
     t.confirmable 
     t.recoverable 
     t.rememberable 
     t.trackable 
     t.token_authenticatable 
     t.timestamps 
    end 
    end 
end 

Nach diesem folgen sollte es funktionieren. https://github.com/plataformatec/devise/wiki/How-To:-change-an-already-existing-table-to-add-devise-required-columns. Aber wenn rake db ausgeführt wird: Migration bekomme ich folgende

undefined method `confirmable' for #<ActiveRecord::ConnectionAdapters::Table:0x9286a28> 

Ich betreibe haben die folgende Zeile

rails g devise:install 

Gibt es Gründe, devise wird es nicht erkennen, brauche ich etwas zu tun, zu sagen Kunden ein Gerät ?? Vielen Dank im Voraus

+0

hast du "devise" gem zu deiner Gemfile hinzugefügt und dann "bundle install" ausgeführt? nur eine Bestätigung :) –

+0

Ja, ich habe, aber ich sehe, es ist kein Helfer beteiligt. sollte ich mir darüber Gedanken machen? – Jseb

+0

Richtige Antwort markieren! – retro

Antwort

17

Es sieht so aus, als wäre die Dokumentation veraltet.

Versuchen devise Generator verwendet, wird es gleiche Migration zu erstellen, mit korrekten Parametern, es ist in Ordnung, wenn sie ein bestehendes Modell:

rails g devise customer 

es AddDeviseToCustomers Migration

mit etwas ähnlichem wie dies schaffen soll:

class AddDeviseToCustomers < ActiveRecord::Migration 
def self.up 
change_table(:customers) do |t| 
    ## Database authenticatable 
    t.string :email,    :null => false, :default => "" 
    t.string :encrypted_password, :null => false, :default => "" 

    ## Recoverable 
    t.string :reset_password_token 
    t.datetime :reset_password_sent_at 

    ## Rememberable 
    t.datetime :remember_created_at 

    ## Trackable 
    t.integer :sign_in_count, :default => 0 
    t.datetime :current_sign_in_at 
    t.datetime :last_sign_in_at 
    t.string :current_sign_in_ip 
    t.string :last_sign_in_ip 

    ## Confirmable 
    t.string :confirmation_token 
    t.datetime :confirmed_at 
    t.datetime :confirmation_sent_at 
    t.string :unconfirmed_email # Only if using reconfirmable 

    ## Lockable 
    # t.integer :failed_attempts, :default => 0 # Only if lock strategy is :failed_attempts 
    # t.string :unlock_token # Only if unlock strategy is :email or :both 
    # t.datetime :locked_at 

    ## Token authenticatable 
    # t.string :authentication_token 


    # Uncomment below if timestamps were not included in your original model. 
    # t.timestamps 
end 

def self.down 
# By default, we don't want to make any assumption about how to roll back a migration when your 
# model already existed. Please edit below which fields you would like to remove in this migration. 
raise ActiveRecord::IrreversibleMigration 
end 
end 

beachten Sie, dass es nicht mehr ist t.confirmable

+0

Wouldl es meinen aktuellen Benutzer löschen? – Jseb

+0

Nein. Versuchen Sie es selbst in einem Dummy-Projekt :) Sie können auch auf [Dokument 2.0 hier] zugreifen (https://github.com/plataformatec/devise/wiki/How-To:-Upgrade-to-Devise-2.0 -migration-schema-style) –

+0

Danke, dass es jetzt funktioniert, ich muss lernen und es richtig verwenden – Jseb

Verwandte Themen