Ошибки при выполнении пользовательской миграции - PullRequest
0 голосов
/ 20 мая 2011

Я пытаюсь реализовать библиотеку аутентификации Devise, а также добавить столбцы, которые мне могут понадобиться, которые относятся к моему собственному приложению.

Я запускаю команду миграции rake и получаю странную ошибку. Вот мой файл devise_create_users:

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

      # t.encryptable
      # 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
    # add_index :users, :authentication_token, :unique => true
  end

  def self.down
    drop_table :users
  end
end

И минимальный файл create_users

class CreateUsers < ActiveRecord::Migration
  def self.up
    create_table :users do |t|

      t.timestamps
    end
  end

  def self.down
    drop_table :users
  end
end

Но странно то, что когда я запускаю миграцию, я получаю эту ошибку:

Mysql2::Error: Table 'users' already exists: CREATE TABLE `users` (`id` int(11) DEFAULT NULL auto_increment PRIMARY KEY, `email` varchar(255) DEFAULT '' NOT NULL, `encrypted_password` varchar(128) DEFAULT '' NOT NULL, `reset_password_token` varchar(255), `reset_password_sent_at` datetime, `remember_created_at` datetime, `sign_in_count` int(11) DEFAULT 0, `current_sign_in_at` datetime, `last_sign_in_at` datetime, `current_sign_in_ip` varchar(255), `last_sign_in_ip` varchar(255), `created_at` datetime, `updated_at` datetime) ENGINE=InnoDB

Что очень странно, потому что я никогда не упоминал ни один из этих столбцов в файлах, перечисленных выше. Откуда берутся дополнительные столбцы? И должен ли мой второй файл create_users быть обновлением вместо создания?

Спасибо!

Ответы [ 2 ]

3 голосов
/ 20 мая 2011

У вас возникла эта проблема, потому что вы пытаетесь создать таблицу users дважды.

Ваша первая миграция создаст таблицу users, а странные столбцы, которые вы видите, созданы devise.

Если вам нужно обновить столбцы, используйте:

class CreateUsers < ActiveRecord::Migration
  def self.up
    add_column :table_name, :new_column_name, :data_type  #add new column
    remove_column :table_name, :column_to_remove          #remove an existing column
  end

  ...
end

Посмотрите на Миграции для получения дополнительной информации.

2 голосов
/ 20 мая 2011

При первой миграции будет создана таблица (create_table (: users)) с именем users и всеми необходимыми для работы столбцами.Так что ваша вторая миграция не нужна.Это не удастся, потому что таблица уже существует.(также поля отметок времени уже установлены). Если вы хотите добавить другие поля в таблицу пользователей, вы можете добавить их в первоначальную миграцию или выполнить миграцию для обновления таблицы пользователей.Не забудьте добавить эти поля в качестве доступных атрибутов в вашей пользовательской модели.

...