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

Foi útil?

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:

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

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.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top