首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >更改Rails 2中的架构

更改Rails 2中的架构
EN

Stack Overflow用户
提问于 2012-11-30 21:15:55
回答 1查看 166关注 0票数 0

我需要在我的模式中添加一些列到表中。谁能告诉我做这件事的最好方法?

以下内容似乎不完整或错误,因为schema.rb文件没有更新以包含新列,并且所有相应的视图文件(编辑、索引、新建、显示)都没有更新以包含新列。更不用说生成的所有这些迁移类的膨胀了。谢谢

代码语言:javascript
复制
ruby script/generate migration RecordLabelToAlbums record_label:string
      exists  db/migrate
      create  db/migrate/20121130125859_record_label_to_albums.rb

创建以下内容:

代码语言:javascript
复制
class RecordLabelToAlbums < ActiveRecord::Migration
def self.up
end

def self.down
 end
end

然后我添加了以下内容:

代码语言:javascript
复制
class RecordLabelToAlbums < ActiveRecord::Migration
def self.up
   add_column :albums, :record_label, :text
end

def self.down
   remove_column :albums, :record_label
end

end

我跑了:

代码语言:javascript
复制
rake db:migrate

获取: Mysql::Error:表'albums‘已存在: CREATE TABLE albums (id int(11) DEFAULT NULL auto_increment主键,created_at datetime,updated_at datetime)

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 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很快就会到来。如果你不接受冲击和升级,你会发现你自己陷入了不兼容,弃用,安全和性能问题等等的死水中。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/13646024

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档