2010-12-12 90 views
4

Ce ne peut pas être spécifique Devise mais je me demande comment ajouter un module supplémentaire à un petit bijou qui a déjà été installé lorsque l'installation initiale ne comprenait pas ledit module? Dans le cas de Devise, l'assistant de migration t.confirmable est utile dans la méthode Self.up de la migration initiale et la table User entière est supprimée dans le Self.down. Mon Rails-fu est pas assez fort pour découvrir ce que l'aide t.confirmable est en train de faire ...gem Devise: module complémentaire après l'installation

Que se passe lorsque la table User existe déjà et que vous voulez ajouter quelque chose comme :confirmable ou :token_authenticatable? De toute évidence, vous ne pouvez pas juste create_table(:users) encore ... alors je pense que je veux add_column :users, ... et remove_column :users, ... mais comment allons-nous savoir ce qui doit se passer?

Répondre

4

Jetez un oeil à :: schéma Devise

https://github.com/plataformatec/devise/blob/master/lib/devise/schema.rb

qui a cette

# Creates confirmation_token, confirmed_at and confirmation_sent_at. 
    def confirmable 
     apply_devise_schema :confirmation_token, String 
     apply_devise_schema :confirmed_at,   DateTime 
     apply_devise_schema :confirmation_sent_at, DateTime 
    end 

puis

https://github.com/plataformatec/devise/blob/master/lib/devise/orm/active_record.rb

def apply_devise_schema(name, type, options={}) 
    column name, type.to_s.downcase.to_sym, options 
end 

Donc, dans votre migration juste faire

add_column :users, :confirmation_token, :string 
add_column :users, :confirmed_at, :datetime 
add_column :users, :confirmation_sent_at, :datetime 

et le contraire pour le bas ..

0

migration:

class DeviseAddConfirmable < ActiveRecord::Migration 
    def change 
     change_table(:users) do |t| 
      t.confirmable 
     end 

     add_index :users, :confirmation_token, :unique => true 
    end 
    end