Rails 3迁移错误:SQLite3 :: SQLException:表“myTable”已经存在:

时间:2012-07-14 20:05:30

标签: ruby-on-rails-3 database-migration

我之前从未使用过db,所以这对我来说都是新手。我在RubyMine,Rails 3工作。

  • 首先,什么是迁移,为什么要迁移?我不能只通过数据库浏览器编辑数据库吗?迁移是保留我的数据还是什么?
  • 其次,我继承了一个项目,迁移文件夹中有3个文件,名称为20120128022506_users.rb。如果我只是运行迁移任务,我会得到:
  

SQLite3 :: SQLException:表“projects”已经存在:CREATE TABLE“projects”(“id”INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL,“partner_id”integer,“name”varchar(255))

事实上,如果您按预期查看名为"20120531031320_projects.rb"的文件,它会尝试创建项目表:

 def up
    create_table :projects do |table|
      table.integer :partner_id
      table.string :name
    end
    add_index :projects, :name
  end

这个项目是从Sinatra移植的,也许数据库和迁移文件不同步(如果这是正确的术语)。无论如何,有没有办法在这些迁移文件和数据库之间进行同步,以便我可以使用新的迁移文件向数据库添加新表?

1 个答案:

答案 0 :(得分:1)

我通过在迁移中添加条件来解决这个问题,以查看db中是否存在“项目”:

  def up
    if (!ActiveRecord::Base.connection.tables.include?("projects"))
      create_table :projects do |table|
        table.integer :partner_id
        table.string :name
      end
    end
  end