我当前的迁移文件是
class CreateMovies < ActiveRecord::Migration
def up
create_table :movies, :force => true do |t|
t.string :title
t.string :rating
t.text :description
t.datetime :release_date
# Add fields that let Rails automatically keep track
# of when movies are added or modified:
t.timestamps
end
end
def down
drop_table :movies
end
end
我尝试将release_date类型更改为整数。所以我直接将文件更改为
class CreateMovies < ActiveRecord::Migration
def up
create_table :movies, :force => true do |t|
t.string :title
t.string :rating
t.text :description
t.integer :release_date
# Add fields that let Rails automatically keep track
# of when movies are added or modified:
t.timestamps
end
end
def down
drop_table :movies
end
end
请注意,release_date类型已更改。但是在我运行之后
捆绑exec rake db:migrate
它仍然生成与以前相同的模式文件。我很困惑。
答案 0 :(得分:3)
可能是因为您已经运行了迁移。所以在你想要改变它之前,你应该首先回滚它:
bundle exec rake db:rollback
然后你应该修改它并再次运行:
bundle exec rake db:migrate
答案 1 :(得分:1)
作为删除和增加迁移的替代方法,您可以进行新迁移以更改列类型。
class ChangeMoviesReleaseTypeToInteger < ActiveRecord::Migration
def up
change_column :movies, :release_date, :integer
end
def down
change_column :movies, :release_date, :datetime
end
end
正如旁注,release_date
是一个整数字段的令人困惑的名称 - 大多数人都希望它是你原来的日期时间。
答案 2 :(得分:0)
向下将删除表格
rake db:migrate:down VERSION = file_name(不包括扩展名)
向上将创建新的更改
rake db:migrate:up VERSION=file_name(exclude extension)