0

我以前从未使用过数据库,所以这对我来说是全新的。我在 RubyMine,Rails 3 中工作。

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

SQLite3::SQLException:表“projects”已经存在:CREATE TABLE“projects”(“id”INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL,“partner_id”整数,“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 移植过来的,可能 db 和迁移文件不同步(如果这是正确的术语)。无论如何,有没有办法在这些迁移文件和数据库之间进行同步,以便我可以使用新的迁移文件向数据库添加一个新表?

4

1 回答 1

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
于 2012-07-14T23:23:20.540 回答