Rails:使用脚手架后,我无法迁移

Posted

技术标签:

【中文标题】Rails:使用脚手架后,我无法迁移【英文标题】:Rails: after using scaffold, I can't migrate 【发布时间】:2014-11-28 11:22:13 【问题描述】:

[导轨 4.1.6,红宝石 2.1.3p242]

1.设置 database.yml database: bookshop ,并在我的数据库中创建 bookshop 数据库。

2.通过SQL创建一个新表booksid int(10), name varchar(45)(我使用mysql)。

3.一切正常,我可以在浏览器中打开项目了。 在我成功输入rails g scaffold Book id:integer name:string 后,事情变得有点奇怪。 但是,当我重新启动 rails 项目时,浏览器就出来了

“正在等待迁移。要解决此问题,请运行:bin/rake db:migrate RAILS_ENV=development”

    bin/rake db:migrate RAILS_ENV=development 它显示

== 20141003105907 CreateBooks:迁移 ====================================== -- create_table(:books) 耙中止! StandardError:发生错误,所有后续迁移都已取消:

您不能重新定义主键列“id”。要定义自定义主键,请将 id: false 传递给 create_table./usr/local/...

【问题讨论】:

创建 Book 表后,您必须将其迁移到数据库中,因此它等待您进行表的迁移,并且表的 id 会自动创建您不需要'不必定义它 我创建了表books,然后我使用scaffold。那么,我所做的顺序错误? 您是否尝试在不定义 id 的情况下销毁表并重新创建它? 在我手动放下我的表'books'后,它又可以工作了!再次感谢你! :) 【参考方案1】:

ID 字段默认添加到模型中 - 您不需要自己添加它们。

使用rails destroy scaffold Book 销毁您创建的脚手架,然后再次创建它——这次没有id:integer 字段。

【讨论】:

我按照你说的做了。但它再次显示"Migrations are pending. To resolve this issue, run: bin/rake db:migrate RAILS_ENV=development",我输入了rake....,它显示talbe 'books' has already exists.. @Johnn 脚手架创建 rails 使用的迁移。删除您的 books 表并运行迁移 好的。在我手动放下我的桌子“书”后,它又可以工作了!太感谢了! :)

以上是关于Rails:使用脚手架后,我无法迁移的主要内容,如果未能解决你的问题,请参考以下文章

使用带有 Rails 脚手架的测试驱动开发 (TDD)

在 Rails 中撤消脚手架

Rails 4控制器由脚手架生成的新闻无法正常工作

Ruby on Rails 脚手架不显示

基本 .ajax 发布到 rails 3.2.2 脚手架,生成“警告:无法验证 CSRF 令牌真实性”

Ruby On Rails在脚手架之后添加新页面