【问题标题】:How can I fix a typo in data migration?如何修复数据迁移中的拼写错误?
【发布时间】:2018-08-19 22:31:15
【问题描述】:

我正在学习 Michael Hartl Ruby on Rails 教程,并在第 11 章末尾遇到了这个问题。

我进行了迁移以将activation_digestactivatedactivated_at 列添加到我的数据模型中。

$ rails generate migration add_activation_to_users \
> activation_digest:string activated:boolean activated_at:datatime

如您所见,我写的是datatime 而不是datetime。 现在我的迁移文件如下所示:

class AddActivationToUsers < ActiveRecord::Migration[5.1]
  def change
    add_column :users, :activation_digest, :string
    add_column :users, :activated, :boolean, default: false
    add_column :users, :activated_at, :datatime
  end
end

我可以通过编辑迁移文件来简单地修复此错误吗?或者我应该在命令行重新运行迁移?有没有更好的方法来做到这一点?

【问题讨论】:

  • 您是否已经运行迁移?
  • 我确实已经运行了迁移,应该在帖子中指定,对不起!
  • 您是否运行了迁移 (rake db:migrate)?它成功完成了吗?
  • 我做到了,我没有任何理由认为它没有成功完成,但可能是我看的不够仔细。

标签: ruby-on-rails


【解决方案1】:
rake db:rollback 

将回滚迁移,然后您可以修复错字并运行

rake db:migrate 

再次重新运行迁移。

【讨论】:

  • 基本正确,但如果他们使用的是更高版本:它是:rails db:rollbackrails db:migrate。更正说他们使用的命令是最好的。
  • 真的吗?我仍然使用rake
  • 根据这个this answer,看起来rails db:migrate实际上被委托给rake db:migrate。那么,为什么rake db:migrate 是“基本正确”而不是“正确”?
  • sitepoint.com/… "Rails 5 的另一个很酷的特性是所有rake 命令现在都存在于rails 中(例如,rake db:migrate 变为rails db:migrate)。"还不是强制性的(或曾经?),但由于这很令人困惑并且显然是不必要的区别,所以现在都是rails
  • 如果我没看错(我可能不是),看来 rails 本质上是 wrapping rake 任务(通过Rake Proxy)。因此,IMO 说所有 rake 命令现在都“存在”在 Rails 中有点误导。 Rake 任务存在于它们一直存在的地方。我很欣赏这是为了让事情变得不那么混乱(我不知道它可能会也可能不会)。我想我不明白这一切如何使答案不那么正确。也许不那么时髦……
【解决方案2】:

您可以在运行迁移之前编辑迁移文件。

【讨论】:

  • 您确定迁移成功了吗?对于无效的数据类型:datatime,它不应该能够运行,您也不应该回滚迁移。回滚会撤消上一次成功的迁移,我怀疑这就是您真正想要的。您应该能够编辑迁移文件并尝试再次运行迁移。
猜你喜欢
  • 2018-09-28
  • 2023-03-27
  • 1970-01-01
  • 2021-09-23
  • 1970-01-01
  • 2019-06-26
  • 2020-11-07
  • 1970-01-01
  • 2019-10-04
相关资源
最近更新 更多