解决!
非常感谢。这似乎是移民的冲突 版本。我刚从scheme_migrations表中删除了最后的记录 与列重命名有关。我也删除了所有迁移文件 在与重命名相关的db / migrations中。
我有一张表products_images
:
class CreateProductsImages < ActiveRecord::Migration
def change
create_table :products_images, id: false do |t|
t.references :product
t.references :image
t.integer :position
end
add_index :products_images, [:product_id, :image_id]
add_index :products_images, [:image_id, :product_id]
end
end
当我尝试开始迁移以将列position
重命名为priority
时,rails已进行迁移而没有任何错误。但是没有应用数据库表products_images
的更改。当然,我可以删除列并使用其他名称创建新列。只是好奇心 - 为什么? DB是SQLite
迁移重命名:
变体1
class RenamePositionToPriority < ActiveRecord::Migration
def change
rename_column :products_images, :position, :priority
end
end
变体2:
class RenamePositionToPriority < ActiveRecord::Migration
def change
#rename_column :products_images, :position, :priority
change_table :products_images do |t|
t.rename :position, :priority
end
end
end
rake db:rollback 输出:
DL is deprecated, please use Fiddle == RenamePositionToPriority: reverting ======================================= -- rename_column(:products_images, :priority, :position) rake aborted! An error has occurred, this and all later migrations canceled: Missing column products_images.priorityC:in `migrate' Tasks: TOP => db:rollback
答案 0 :(得分:2)
第1步: rails g migration RenameColumn
第二步:之前rake db:在/ db文件夹上迁移打开迁移文件
class RenameColumn&lt; ActiveRecord的::迁移
def self.up
rename_column :products_images, :position, :priority
end
def self.down
rename_column :products_images, :priority, :position
end
端
第3步: rake db:migrate
答案 1 :(得分:0)
class RenamePositionToPriority&lt; ActiveRecord的::迁移
def self.up rename_column:products_images,:position,:priority rename_column:products_images,:position,:priority 端def self.down rename_column:products_images,:position,:priority rename_column:products_images,:position,:priority 结束 端
你可以试试这次迁移吗
答案 2 :(得分:0)
运行后你有什么机会'改变'迁移代码吗?只是为了澄清一些事情:Rails无法“记住”您通过迁移所做的一系列更改。它只创建一个名为schema_migrations
的表,其中包含version
列。基本上,此表包含一个版本列表(用于标识迁移)。