Modificando módulos de elaboração após a primeira geração
-
26-09-2019 - |
Pergunta
Estou no processo de aprendizado de trilhos. Achei o Devise ser ótimo em obter autenticação em funcionamento de maneira rápida e sem problemas, mas tenho uma pergunta.
Como altero os módulos após a primeira execução do gerador Devise (por exemplo, Rails G Devende usuário)? Isso padrão com a seguinte migração:
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
Se eu execute essa migração, como adicionar/remover alguns desses módulos posteriormente? Por exemplo, talvez eu queira adicionar travável a um modelo de usuário existente. Eu entendo como fazer as mudanças no modelo e devise.rb
Mas não tenho certeza do que fazer com as migrações.
Desculpas, se a resposta já estiver aqui, eu me arrastei por algumas horas aqui e no Google e não consegui encontrar nada. Talvez eu esteja procurando a coisa errada.
Desde já, obrigado!
Jason
ps. estou a usar
Rails 3.0.0
Devise 1.1.3
Solução
Altere as linhas que você deseja no arquivo de migração e refaça a migração de acordo com estas instruções:
Outras dicas
Eu estava procurando resposta para a mesma pergunta e, felizmente, estava sentado ao lado de alguém que sabia como fazê -lo.
Aqui está o exemplo de atualização do modelo de usuários para incluir módulo confirmável por meio de um script de migração (o arquivo de script de esqueleto gerado com 'Rails geram migração 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
Eu estava recebendo este erro:
undefined local variable or method `confirmed_at' for #<User:0x000001041531c8> (NameError)
Para adicionar confirmável -
Gerar a migração:
$ rails generate migration add_confirmable_to_users
Edite a migração:
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-Tow:upgrade-to-devise-2.0-migration-schema-style
Desde que você esteja apenas removendo opções em que os campos apropriados já foram adicionados ao seu esquema (como confirmável), você sempre pode editar o modelo de usuários diretamente sem uma nova migração.