【问题标题】:Tried to create a scaffold but migration already exists in Rails尝试创建脚手架,但 Rails 中已存在迁移
【发布时间】:2014-02-06 20:39:14
【问题描述】:

我尝试创建一个名为 Message 的新脚手架并收到以下错误消息:

Another migration is already named create_messages

除了更改模型/控制器/视图的名称(我不想这样做)之外,我还能做什么?

发生这种情况的原因是我以前有一个名为 Message 的脚手架,我将其更改为不同的名称(运行迁移以执行此操作,同时搜索和替换所有文件名和变量/类名)。我明白为什么会收到此错误消息,只是想知道如何继续。

【问题讨论】:

    标签: ruby-on-rails ruby-on-rails-3 activerecord ruby-on-rails-3.2 ruby-on-rails-4


    【解决方案1】:

    快速解决方法是重命名旧迁移 (create_messages) 并尝试再次生成脚手架。

    但建议使用单个 create_messages 迁移,以便可以通过销毁脚手架命令安全地删除它。

    更新:

    如果已经有 Message 模型,那么生成 Message Scaffold 就没有意义了,因为脚手架会再次做同样的事情,但需要额外的工作,比如生成控制器、路由等。

    【讨论】:

    • 我想要一个用于Message完整脚手架。我曾经拥有一个不同的Message,我完全重命名了它(表、模型、视图、控制器、引用等)。简单地重命名迁移文件是否安全?
    • 如果你已经重命名了所有其他文件,那么你也可以重命名迁移,但是重命名迁移并不是一个好主意,这对于多个环境可能会很麻烦。
    • 不要忘记在旧迁移脚本中重命名类。否则,在“rake db:create:all”之后执行“rake db:migrate”时会出现“NameError: uninitialized constant”错误。
    【解决方案2】:

    如果您已经有一个名为 create_messages 的迁移,您可能已经有一个消息模型(这意味着您不能有另一个名称相同的模型)。如果您现在决定要在模型上使用脚手架来获取额外的控制器和查看代码,请使用以下内容,其中 name 是列的名称。

    rails g scaffold Message name --skip

    【讨论】:

    • 我更新了问题以表明我曾经拥有一个名为Message 的脚手架,我将其完全重命名。这个--skip 在这种情况下有效吗?
    • 我的解决方案是如果你已经有一个消息模型。由于您之前重命名了所有内容,因此最好的选择是按照上面所说的进行。重命名迁移,然后在新的Message 模型上执行普通的脚手架。--skip 如果您已经运行 rails g model 并且现在意识到您想为它使用脚手架。一个upvote将不胜感激,所以我可以制作cmets。
    猜你喜欢
    • 2018-03-31
    • 2014-11-28
    • 1970-01-01
    • 2018-02-12
    • 2016-05-21
    • 1970-01-01
    • 2013-08-23
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多