2010-09-29 5 views
7

Estoy en el proceso de aprender los rieles. He descubierto que Devise es excelente para que la autenticación se ejecute de manera rápida y sin problemas, pero tengo una pregunta.Modificación de los módulos de diseño después de la primera generación

¿Cómo cambio los módulos después de la primera ejecución del generador Devise (por ejemplo, rieles g delinear usuario)? El valor por defecto con la siguiente migración:

def self.up 
    create_table(:users) do |t| 
    t.database_authenticatable :null => false 
    t.recoverable 
    t.rememberable 
    t.trackable 

    # t.confirmable 
    # t.lockable :lock_strategy => :failed_attempts, :unlock_strategy => :both 
    # t.token_authenticatable 

    t.timestamps 
    end 

    add_index :users, :email,    :unique => true 
    add_index :users, :reset_password_token, :unique => true 
    # add_index :users, :confirmation_token, :unique => true 
    # add_index :users, :unlock_token,   :unique => true 
end 

Si me he encontrado esta migración, ¿cómo puedo añadir/eliminar algunos de esos módulos en una etapa posterior? P.ej. Tal vez quiero agregar bloqueable a un modelo de Usuario existente. Entiendo cómo realizar los cambios en el modelo y devise.rb, pero no estoy seguro de qué hacer con las migraciones.

Disculpas si la respuesta ya está aquí, he navegado durante un par de horas aquí y en google y no he podido encontrar nada. Tal vez estoy buscando algo equivocado.

¡Gracias de antemano!
Jason
ps. Estoy usando
rieles 3.0.0
Idear 1.1.3

Respuesta

0

Cambiar las líneas que desee en el archivo de migración, a continuación, vuelva a realizar la migración de acuerdo con estas instrucciones:

http://guides.rubyonrails.org/migrations.html

+0

Hola Chuck. Gracias por el consejo. Voy a darle una oportunidad. ¿Es este enfoque saludable si hay otras migraciones después de la utilizada para Devise? – Jason

+0

Sí. Rails es lo suficientemente inteligente como para aplicar las migraciones necesarias en el orden en que se agregaron, en función de las marcas de tiempo y el seguimiento interno del cual ya se han ejecutado. –

+0

Gracias Joost. No estaba seguro – Jason

1

Mientras como solo está eliminando opciones donde los campos apropiados ya fueron agregados a su esquema (como confirmable), siempre puede simplemente editar el modelo de Usuarios directamente sin una nueva migración.

+0

Gracias Joost. También estoy interesado en agregar elementos, p. t.lockable no es solo un campo llamado bloqueable. – Jason

+0

Creo que tipos personalizados como este no se pueden hacer completamente desde la línea de comandos de rieles, por lo que sería posible ejecutar 'rails generate migration AddLockableToUsers' y luego editar manualmente el archivo en la carpeta db/migrate que genera y agregar t .confirmable. Luego ejecute 'rake db: migrate' y su campo será agregado. –

6

Estaba buscando la respuesta a la misma pregunta, y afortunadamente, estaba sentado junto a alguien que sabía cómo hacerlo.

Aquí está el ejemplo de la actualización del modelo usuarios para incluir el módulo confirmable a través de un script de migración (el archivo de script esqueleto generado con 'rieles generar migración add_confirmable_to_users'):

class AddConfirmableToUser < ActiveRecord::Migration 
    def self.up 
    change_table :users do |t| 
     t.confirmable 
    end 
    add_index :users, :confirmation_token, :unique => true 
    end 

    def self.down 
    remove_column :users, :confirmable 
    remove_index :users, :confirmation_token 
    end 
end 
+0

Gracias Prakash. Lo intentaré la próxima vez que lo necesite :) – Jason

2

que estaba recibiendo este error :

undefined local variable or method `confirmed_at' for #<User:0x000001041531c8> (NameError) 

Para añadir Confirmable -

Generar la migración:

$ rails generate migration add_confirmable_to_users 

Editar la migración:

class AddConfirmableToUsers < ActiveRecord::Migration 
    def change 
    add_column :users, :confirmation_token, :string 
    add_column :users, :confirmed_at, :datetime 
    add_column :users, :confirmation_sent_at, :datetime 
    add_column :users, :unconfirmed_email, :string 
    end 
end 

http://guides.rubyonrails.org/migrations.html
https://github.com/plataformatec/devise/wiki/How-To:-Upgrade-to-Devise-2.0-migration-schema-style

Cuestiones relacionadas