Rails 3.1使用change_table迁移添加列

时间:2011-07-20 09:44:01

标签: ruby-on-rails ruby-on-rails-3.1

我有一个名为profiles的表,其中包含一些列。

现在,我希望使用rails 3.1中的change - 方法向此表添加几列。我使用以下代码创建了一个迁移:

def change
  change_table :profiles do |t|
    t.string :photo
    t.string :name
    t.references :user
  end
end

迁移工作完美,但是当我想要回滚时,我得到了

SQLite3::SQLException: duplicate column name: photo: ALTER TABLE "profiles" ADD "photo" varchar(255)

任何想法为什么?

2 个答案:

答案 0 :(得分:5)

在Rails 3.1中添加列的自动生成的迁移格式为:

class AddColumnToTable < ActiveRecord::Migration
  def change
    add_column :table, :column, :type
  end
end

也许尝试这种语法?

答案 1 :(得分:0)

看起来你需要告诉迁移如何恢复自己:

def change
  change_table :profiles do |t|
    t.string :photo
    t.string :name
    t.references :user
  end

  reversible do |dir|
    dir.down do
      remove_column :profiles, :photo
      remove_column :profiles, :name
      remove_column :profiles, :user_id
    end
  end
end

有关详细信息,请参阅http://guides.rubyonrails.org/migrations.html#using-reversible

或者您可以尝试使用旧的上下方法,这些方法仍然可用:

def up
  change_table :profiles do |t|
    t.string :photo
    t.string :name
    t.references :user
  end
end

def down
  remove_column :profiles, :photo
  remove_column :profiles, :name
  remove_column :profiles, :user_id
end

有关上/下的详情:http://guides.rubyonrails.org/migrations.html#using-the-up-down-methods