我需要在模式中的表中添加一些列。有人能告诉我最好的方法吗?
以下内容似乎不完整或错误,因为schema.rb文件未更新以包含新列,并且所有相应的视图文件(edit,index,new,show)都未更新以包含新列。更不用说生成的所有迁移类的膨胀。感谢
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 ::错误:表'专辑'已经存在:CREATE TABLE albums
(id
int(11)DEFAULT NULL auto_increment PRIMARY KEY,created_at
datetime,updated_at
datetime)< / p>
答案 0 :(得分:1)
您添加的代码是正确的。
该错误表明由于某种原因,您的系统似乎认为它尚未运行创建相册表的原始迁移。迁移状态(在Rails 2中)在数据库中名为schema_migrations
的表中指定 - 如果这一点混淆,那么它将尝试重新运行迁移。我不确定是什么原因导致它混淆,但我记得在2008年我使用Rails 2.x时发生了几次。
表格很简单 - 您可以从SQL提示中查看其中的内容 - 我认为只是它认为已经运行的迁移的名称。
如果您不介意丢失某些数据,可以尝试rake db:rollback
甚至rake db:reset
返回到开头。 rake db:rollback STEP=2
将回滚最近2次迁移。
如果您需要数据,请通过添加一个或多个引用app/db/migrations
中可能遗漏的迁移的新记录来更正表的内容。我认为顺序很重要(格式在Rails 3中有所改变,我不记得如何)。
每当您想要添加或更改数据库架构时,请使用rails生成迁移,然后在准备就绪后运行rake db:migrate
。
并且只是问:你有什么方法可以转移到Rails 3.它已经存在多年了,Rails 4即将推出。如果你不接受命中和升级,你会发现自己陷入了不兼容,弃用,安全和性能问题的困境等等。