我需要在我的模式中添加一些列到表中。谁能告诉我做这件事的最好方法?
以下内容似乎不完整或错误,因为schema.rb文件没有更新以包含新列,并且所有相应的视图文件(编辑、索引、新建、显示)都没有更新以包含新列。更不用说生成的所有这些迁移类的膨胀了。谢谢
ruby script/generate migration RecordLabelToAlbums record_label:string
exists db/migrate
create db/migrate/20121130125859_record_label_to_albums.rb创建以下内容:
class RecordLabelToAlbums < ActiveRecord::Migration
def self.up
end
def self.down
end
end然后我添加了以下内容:
class RecordLabelToAlbums < ActiveRecord::Migration
def self.up
add_column :albums, :record_label, :text
end
def self.down
remove_column :albums, :record_label
end
end我跑了:
rake db:migrate获取: Mysql::Error:表'albums‘已存在: CREATE TABLE albums (id int(11) DEFAULT NULL auto_increment主键,created_at datetime,updated_at datetime)
发布于 2012-11-30 22:17:27
您添加的代码是正确的。
该错误表明,由于某些原因,您的系统似乎认为它尚未运行创建相册表的原始迁移。迁移的状态(在Rails 2中)是在名为schema_migrations的数据库中的表中指定的--如果这一点被混淆,它将尝试重新运行迁移。我不确定是什么导致它变得混乱,但我确实记得在2008年我使用Rails 2.x时发生过几次这种情况。
这个表很简单--您可以从SQL提示符中看到其中的内容--我想只是它认为它已经运行的迁移的名称。
如果您不介意丢失一些数据,您可以尝试使用rake db:rollback甚至rake db:reset来重新开始。rake db:rollback STEP=2将回滚最后两次迁移。
如果需要数据,请通过在app/db/migrations中添加一个或多个引用可能丢失的迁移的新记录来更正表的内容。我认为顺序很重要(在Rails3中格式有一点变化,我不记得是怎么改变的)。
无论何时想要添加或更改数据库模式,都可以使用rails生成迁移,然后在rake db:migrate准备就绪后运行它。
我只是在问:有没有什么方法可以迁移到Rails3。它已经推出很多年了,而Rails4很快就会到来。如果你不接受冲击和升级,你会发现你自己陷入了不兼容,弃用,安全和性能问题等等的死水中。
https://stackoverflow.com/questions/13646024
复制相似问题