Ошибка при использовании gem 'devise' для уже существующей модели - PullRequest
1 голос
/ 31 марта 2019

Я только что попытался добавить гем 'devise' и обнаружил некоторые ошибки.

Но до этого я создал модель User, как этот:

    class CreateUsers < ActiveRecord::Migration[5.2]
    def change
    create_table :users do |t|
        t.string :name
        t.string :email
        t.integer :role
        t.string :password_digest
        t.timestamps
    end
    end
    end

Затем я выполнил команду 'rails generatedevise User 'и он создал миграцию add_devise_to_user:

    class AddDeviseToUsers < ActiveRecord::Migration[5.2]
    def self.up
    change_table :users 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, null: false
    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, null: false # Only if 
    lock strategy is :failed_attempts
    # t.string   :unlock_token # Only if unlock strategy is :email 
    or :both
    # t.datetime :locked_at
    # Uncomment below if timestamps were not included in your 
    original model.
    t.timestamps null: false
    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

    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

Всякий раз, когда я пытаюсь запустить rails db: migrate, терминал показывает мне эти ошибки

    == 20190331081250 AddDeviseToUsers: migrating =================================

- change_table (: users) рельсы прерваны!StandardError: Произошла ошибка, все последующие миграции отменены:

Mysql2 :: Ошибка: повторяющееся имя столбца 'email': ALTER TABLE users ADD email varchar (255) DEFAULT '' NOT NULL

Вызвано: ActiveRecord :: StatementInvalid: Mysql2 :: Ошибка: повторяющееся имя столбца 'email': ALTER TABLE users ADD email varchar (255) DEFAULT '' NOT NULL

У меня естьпроверил вопросы и решения, которые дали люди, но ни один из них не помог мне решить эту проблему (я новичок здесь)

1 Ответ

0 голосов
/ 31 марта 2019

Блок в change_table добавить столбцы в существующую таблицу users. В change_table вы пытаетесь добавить столбец email, но этот столбец уже существует в таблице users. Этот столбец был создан при первой миграции.

Вы должны прокомментировать следующую строку при разработке миграции:

 t.string :email,              null: false, default: ""

И добавить следующую строку при разработке devis после change_table (NOT IN BLOCK) метода:

change_column :users, :email, :string, null: false, default: ""
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...