Ruby on rails 迁移DB Rails时出错

Ruby on rails 迁移DB Rails时出错,ruby-on-rails,database,dbmigrate,Ruby On Rails,Database,Dbmigrate,我正在尝试使用这个迁移,但是我不断得到错误,就像下面这些 这是我的迁移文件 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 =>

我正在尝试使用这个迁移,但是我不断得到错误,就像下面这些

这是我的迁移文件

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
class CreateEmployeestrue
t、 整数:假期天数
t、 案文:评论
终止
终止
def自动关闭
下拉列表:员工
终止
终止
当我尝试执行rake db:migrate时,会出现以下错误:

==CreateEmployees:正在迁移================================================ --创建表格(:employees)rake中止!发生错误,此迁移和所有后续迁移已取消:

SQLite3::SQLException:表“employees”已存在:创建表 “雇员”(“id”整数主键自动递增不为空,“名称” varchar(255),“雇佣”日期,“工资”浮动,“全职”布尔值 默认值为“t”,“vacationdays”整数,“comments”文本) /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\u record/connection\u adapters/sqlite3\u adapter.rb:328:in
block in execute'
/Library/Ruby/Gems/2.0.0/Gems/activerecord-4.0.0/lib/active\u record/connection\u adapters/abstract\u adapter.rb:425:in
block in log' /Library/Ruby/Gems/2.0.0/Gems/activesupport-4.0.0/lib/active\u support/notifications/instrumenter.rb:20:in
仪器'
/Library/Ruby/Gems/2.0.0/Gems/activerecord-4.0.0/lib/active\u record/connection\u adapters/abstract\u adapter.rb:420:in
log' /Library/Ruby/Gems/2.0.0/Gems/activerecord-4.0.0/lib/active\u record/connection\u adapters/sqlite3\u adapter.rb:328:in
execute'
/Library/Ruby/Gems/2.0.0/Gems/activerecord-4.0.0/lib/active\u record/connection\u adapters/abstract/schema\u statements.rb:190:in
create_table' /Library/Ruby/Gems/2.0.0/Gems/activerecord-4.0.0/lib/active\u record/migration.rb:625:in
方法中的块\u缺失'
/Library/Ruby/Gems/2.0.0/Gems/activerecord-4.0.0/lib/active\u record/migration.rb:597:in
用“时间”阻塞 /Library/Ruby/Gems/2.0.0/Gems/activerecord-4.0.0/lib/active\u record/migration.rb:597:in
用“时间”说“时间”
/Library/Ruby/Gems/2.0.0/Gems/activerecord-4.0.0/lib/active\u record/migration.rb:617:in
方法\u缺失' /Library/Ruby/Gems/2.0.0/Gems/activerecord-4.0.0/lib/active\u record/migration.rb:383:in
method\u missing'/Users/YuriAguirre/Documents/Aptana Studio 3
Workspace/company/db/migrate/20130923140626\u create\u employees.rb:3:in
up' /Library/Ruby/Gems/2.0.0/Gems/activerecord-4.0.0/lib/active\u record/migration.rb:534:in
up'
/Library/Ruby/Gems/2.0.0/Gems/activerecord-4.0.0/lib/active\u record/migration.rb:574:in
exec\u迁移' /Library/Ruby/Gems/2.0.0/Gems/activerecord-4.0.0/lib/active\u record/migration.rb:555:in 迁移中的块(2个级别)

/Library/Ruby/Gems/2.0.0/Gems/activerecord-4.0.0/lib/active\u record/migration.rb:554:in
migrate中的块' /Library/Ruby/Gems/2.0.0/Gems/activerecord-4.0.0/lib/active\u record/connection\u adapters/abstract/connection\u pool.rb:294:in
与_连接'
/Library/Ruby/Gems/2.0.0/Gems/activerecord-4.0.0/lib/active\u record/migration.rb:553:in
migrate' /Library/Ruby/Gems/2.0.0/Gems/activerecord-4.0.0/lib/active\u record/migration.rb:709:in
migrate'
/Library/Ruby/Gems/2.0.0/Gems/activerecord-4.0.0/lib/active\u record/migration.rb:959:in
在事务中执行迁移时阻塞 /Library/Ruby/Gems/2.0.0/Gems/activerecord-4.0.0/lib/active\u record/migration.rb:1005:in ddl_事务中的
块'
/Library/Ruby/Gems/2.0.0/Gems/activerecord-4.0.0/lib/active\u record/connection\u adapters/abstract/database\u statements.rb:202:in
在事务中阻塞' /Library/Ruby/Gems/2.0.0/Gems/activerecord-4.0.0/lib/active\u record/connection\u adapters/abstract/database\u statements.rb:210:in
在新交易中
/Library/Ruby/Gems/2.0.0/Gems/activerecord-4.0.0/lib/active\u record/connection\u adapters/abstract/database\u statements.rb:202:in
transaction' /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\u record/migration.rb:1005:in
ddl\U交易' /Library/Ruby/Gems/2.0.0/Gems/activerecord-4.0.0/lib/active\u record/migration.rb:958:in
在\u事务中执行\u迁移\u'
/Library/Ruby/Gems/2.0.0/Gems/activerecord-4.0.0/lib/active\u record/migration.rb:920:in
migrate中的块' /Library/Ruby/Gems/2.0.0/Gems/activerecord-4.0.0/lib/active\u record/migration.rb:916:in
每个'
/Library/Ruby/Gems/2.0.0/Gems/activerecord-4.0.0/lib/active\u record/migration.rb:916:in
migrate' /Library/Ruby/Gems/2.0.0/Gems/activerecord-4.0.0/lib/active\u record/migration.rb:764:in
up'
/Library/Ruby/Gems/2.0.0/Gems/activerecord-4.0.0/lib/active\u record/migration.rb:742:in
migrate' /Library/Ruby/Gems/2.0.0/Gems/activerecord-4.0.0/lib/active\u record/railties/databases.rake:42:in `“Tasks:TOP=>db:migrate”中的块(2个级别)(请参见 通过使用--trace运行任务完成完整跟踪


正如我在评论中所写,您收到该错误是因为:

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 CreateEmployees class RemoveEmployees < ActiveRecord::Migration
       def change
         drop_table :employees
       end
     end
    
    rake db:drop
    rake db:create
    rake db:migrate
    
    rails db:rollback
    rails db:migrate