2012-07-14 52 views
0

我以前从来没有使用db,所以这对我来说都是新的。我正在RubyMine,Rails 3中工作。Rails 3迁移错误:SQLite3 :: SQLException:表“myTable”已经存在:

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

SQLite3::SQLException: table "projects" already exists: CREATE TABLE "projects" ("id" INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL, "partner_id" integer, "name" varchar(255))

而事实上,如果你叫"20120531031320_projects.rb"的文件,如预期看,它正在努力使一个项目表:

​​

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

+1

这可能是一个良好的开端 - http://guides.rubyonrails.org/ migrations.html – house9 2012-07-14 20:28:00

+0

此外,rails会跟踪它创建的schema_migrations表中执行了哪些迁移 – house9 2012-07-14 20:32:48

+0

感谢house9,这让我走了! – dt1000 2012-07-14 23:19:24

回答

1

我解决了这个通过把有条件的迁移,看看是否“项目”中的分贝存在:

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

如果遇到这个问题,这是一个很好的习惯吗?不知道这是否会在以后的屁股咬我。 – andy4thehuynh 2014-04-16 17:39:29