Ошибка для миграции релей DB

Я пытаюсь использовать эту миграцию, но я продолжаю получать ошибку, как эти

Это мой файл миграции

class CreateEmployees < ActiveRecord::Migration
  def self.up
    create_table :employees do |t|
      t.string :name 
      t.date :hiredate 
      t.float :salary 
      t.boolean :fulltime , :default => true 
      t.integer :vacationdays 
      t.text :comments
    end 
  end

  def self.down
    drop_table :employees
  end
end

когда я пытаюсь выполнить rake db: migrate получить эту ошибку:

== CreateEmployees: миграция ================================================================================================= === - create_table (: employees) rake aborted! Произошла ошибка, эта и все последующие миграции были отменены:

SQLite3 :: SQLException: таблица "сотрудники" уже существует: CREATE TABLE "сотрудники" ("id" INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL, "имя" varchar (255), "дата нанятия", "зарплата" float, "fulltime" boolean DEFAULT 't', целое число "каникулы", текст "комментарии")/Library/Ruby/Gems/2.0.0/gems/sql ite3-1.3.8/lib/sqlite3/database.rb: 91: in initialize'/Library/Ruby/Gems/2.0.0/gems/sqlite3-1.3.8/lib/sqlite3/database.rb:91:in new '/Library/Ruby/Gems/2.0.0/gems/sqlite3-1.3.8/lib/sqlite3/database.rb:91:in prepare'/Library/Ruby/Gems/2.0.0/gems/sqlite3-1.3.8/lib/sqlite3/database.rb:134:in execute'/Library/Ruby/Gems/2.0.0/gems/activerecord-4.0.0/lib/active_record/connection_adapters/sqlite3_adapter.rb:328:в block in execute'/Library/Ruby/Gems/2.0.0/gems/activerecord-4.0.0/lib/active_record/connection_adapters/abstract_adapter.rb:425:in блоке в журнале '/Library/Ruby/Gems/2.0.0/gems/activesupport-4.0.0/lib/active_support/notifications/instrumenter.rb:20:in instrument'/Library/Ruby/Gems/2.0.0/gems/activerecord-4.0.0/lib/active_record/connection_adapters/abstract_adapter.rb:420:in instrument'/Library/Ruby/Gems/2.0.0/gems/activerecord-4.0.0/lib/active_record/connection_adapters/abstract_adapter.rb:420:in журнале '/Library/Ruby/Gems/2.0.0/gems/activerecord-4.0.0/lib/active_record/connection_adapters/sqlite3_adapter.rb: 328: в execute'/Library/Ruby/Gems/2.0.0/gems/activerecord-4.0.0/lib/active_record/connection_adapters/abstract/schema_statements.rb:190:in create_table'/Library/Ruby/Gems/2.0. 0/gems/activerecord-4.0.0/lib/active_record/migration.rb: 625: в block in method_missing'/Library/Ruby/Gems/2.0.0/gems/activerecord-4.0.0/lib/active_record/migration.rb:597:in блоке say_with_time '/Library/Ruby/Gems/2.0.0/gems/activerecord-4.0.0/lib/active_record/migration.rb:597:in say_with_time'/Library/Ruby/Gems/2.0.0/gems/activerecord-4.0.0/lib/active_record/migration.rb:617:in method_missing '/Library/Ruby/Gems/2.0.0/gems/activerecord-4.0.0/lib/active_record/migration.rb: 383: in method_missing'/Users/YuriAguirre/Documents/Aptana Studio 3 Workspace/company/db/migrate/20130923140626_create_employees.rb:3:in up'/Li brary/Ruby/Gems/2.0.0/gems/activerecord-4.0.0/lib/active_record/migration.rb: 534: up'/Library/Ruby/Gems/2.0.0/gems/activerecord-4.0.0/lib/active_record/migration.rb:574:in exec_migration '/Library/Ruby/Gems/2.0.0/gems/activerecord-4.0.0/lib/active_record/migration.rb:555:в block (2 levels) in migrate'/Library/Ruby/Gems/2.0.0/gems/activerecord-4.0.0/lib/active_record/migration.rb:554:in block in migrate'/Library/Ruby/Gems/2.0.0/gems/activerecord- 4.0.0/lib/active_record/connection_adapters/abstract/connection_pool.rb: 294: in with_connection'/Library/Ruby/Gems/2.0.0/gems/activerecord-4.0.0/lib/active_record/migration.rb:553:in migrate '/Library/Ruby/Gems/2.0.0/gems/activerecord-4.0.0/lib/active_record/migration.rb:709:in migrate'/Library/Ruby/Gems/2.0.0/gems/activerecord-4.0.0/lib/active_record/migration.rb:959:in блоке в execute_migration_in_transaction '/Library/Ruby/Gems/2.0.0/gems/activerecord-4.0.0/lib/active_record/migration.rb:1005:in block in ddl_transaction'/Library/Ruby/Gems/2.0.0/gems/activerecord-4.0.0/lib/active_record/connection_adapters/abstract/database_statements.rb:202:in block in ddl_transaction'/Library/Ruby/Gems/2.0.0/gems/activerecord-4.0.0/lib/active_record/connection_adapters/abstract/database_statements.rb:202:in блоке в transactio n '/Library/Ruby/Gems/2.0.0/gems/activerecord- 4.0.0/lib/active_record/connection_adapters/abstract/database_statements.rb: 210: in within_new_transact ion'/Library/Ruby/Gems/2.0.0/gems/activerecord-4.0.0/lib/active_record/connection_adapters/abstract/database_statements.rb:202:in транзакции '/Library/Ruby/Gems/2.0.0/gems/activerecord-4.0.0/lib/active_record/transactions.rb:209:in transaction'/Library/Ruby/Gems/2.0.0/gems/activerecord-4.0.0/lib/active_record/migration.rb:1005:in ddl_transaction '/Library/Ruby/Gems/2.0.0/gems/activerecord-4.0.0/lib/active_record/migration.rb:958: in execute_migration_in_transaction'/Library/Ruby/Gems/2.0.0/gems/activerecord-4.0.0/lib/active_record/migration.rb:920:in block in migrate'/Library/Ruby/Gems/2.0.0/gems/activerecord-4.0.0/lib/active_record/migration.rb:916:в each'/Library/Ruby/Gems/2.0.0/gems/activerecord-4.0.0/lib/active_record/migration.rb:916:in each'/Library/Ruby/Gems/2.0.0/gems/activerecord-4.0.0/lib/active_record/migration.rb:916:in migrate '/Library/Ruby/Gems/2.0.0/gems/activerecord-4.0.0/lib/active_record/migration.rb:764:in up'/Library/Ruby/Gems/2.0.0/gems/activerecord-4.0.0/lib/active_record/migration.rb:742:in migrate '/Library/Ruby/Gems/2.0.0/gems/activerecord-4.0.0/lib/active_record/railties/databases.rake: 42: in 'block (2 levels) в разделе "Задачи: TOP => db: migrate (см. полный след, выполнив задачу с помощью --trace).

+1
источник поделиться
4 ответа

Как я написал в комментарии, вы получаете эту ошибку из-за:

SQLite3::SQLException: table "employees" already exists

Это просто означает, что у вас уже есть этот столбец в вашей базе данных. Вы можете решить это несколькими способами:

  • изменение миграции для изменения вместо создания:

    class CreateEmployees < ActiveRecord::Migration
      def self.up
        add_column :employees, :name, :string 
        (...)
        end 
      end
    
      def self.down
        remove_column :employees, :name
      end
    end
    
  • добавьте еще одну миграцию, которая выведет целую таблицу (очевидно, что она должна быть с более ранней отметкой времени, чем изменение одной, поэтому таблица сначала будет удалена, а затем снова создана):

     class RemoveEmployees < ActiveRecord::Migration
       def change
         drop_table :employees
       end
     end
    
  • перетащить таблицу вручную с консоли, но это не очень хороший вариант, так как вы должны научиться использовать миграцию для изменения вашей базы данных, конечно, что это будет самый быстрый (если вы знаете, как использовать консоль) и не наносит вреда если это только какой-то учебный проект, но все же вы должны научиться хорошим привычкам, когда сможете.

Вы также можете использовать более новый синтаксис (AFAIK) def change вместо self.up и self.down, меньше букв для ввода и меньше дублирования;)

+1
источник

Таблицы ваших сотрудников уже созданы в вашей базе данных. Вам нужно исправить это, тогда вы можете сделать это двумя способами: 1. Отбросьте базу данных и создайте еще одну или 2. запустите процесс переноса вниз, а затем перейдите

rake db:drop
rake db:create
rake db:migrate
+2
источник

Вы выполнили эту миграцию уже с ошибкой. Таким образом, миграция прошла наполовину, создав таблицу не полностью. Откат этой миграции, а затем повторите миграцию.

0
источник

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

rails db:rollback
rails db:migrate
0
источник

Посмотрите другие вопросы по меткам или Задайте вопрос