我正在尝试向我的一个表中添加一个额外的字段。
我已经在迁移文件中添加了这个字段(在db\migrate下),然后运行'rake db:migrate‘,运行起来没有问题。我的文本编辑器甚至告诉我,我的schema.db文件已经更新,需要刷新。
模式文件不包含我的新字段,并且任何从我的视图引用该字段的尝试都会失败。
我该怎么做呢?是否可以通过rails使用额外的字段更新表,而不必完全删除并重新创建数据库?
发布于 2009-09-13 03:28:24
在数据库中添加/更改某些内容时,应始终创建新的迁移文件。这就是迁移的目的。迁移文件应该能够进行新的更改和撤消更改。这样,如果出现问题或者您改变了主意,您可以轻松地回滚到以前的迁移。
以下链接中标有“迁移剖析”和“编写迁移”的部分可能会对您有所帮助。
发布于 2014-11-29 15:05:04
我做了同样的事情,我想更改一个字段名称,而不是这样:
class CreateComments < ActiveRecord::Migration
def change
create_table :comments do |t|
t.string :commenter
t.text :body
# this line adds an integer column called `article_id`.
t.references :article, index: true
t.timestamps
end
end
end
我变了
t.text :body
至
t.text :comment_body
我试着做瑞克
db:migrate
没有发生任何事情,因为它再次进入命令提示符,没有任何输出...,我查看了堆栈溢出,this引导我执行rake
db:migrate:redo
不带输出
== 20141129044056 CreateComments: reverting ===================================
-- drop_table(:comments)
-> 0.0000s
== 20141129044056 CreateComments: reverted (0.0886s) ==========================
== 20141129044056 CreateComments: migrating ===================================
-- create_table(:comments)
-> 0.0040s
== 20141129044056 CreateComments: migrated (0.0040s) ==========================
然后我用commenter_body而不是body来加载我的页面/控制器,它完美地加载了。
我认为这也是一个相同的解决方案。我不知道模型/DB中的底层工作是否有任何问题(我仍然是RoR的新手,实际上是我的第三天……)
发布于 2009-09-13 01:57:51
解决了我自己的问题..
基本上,不是编辑您运行scaffolding时生成的原始迁移文件,而是创建一个新的迁移文件来获取您想要获得的内容:
http://guides.rubyonrails.org/migrations.html#creating-a-standalone-migration
https://stackoverflow.com/questions/1416600
复制相似问题