我有一个名为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)
任何想法为什么?
答案 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