【问题标题】:Updating models in rails / migrations在 rails / migrations 中更新模型
【发布时间】:2021-03-12 17:09:21
【问题描述】:

假设我使用以下命令创建了一个“用户”模型:

script/generate model User username:string

这将创建 user.rb 文件以及迁移 rb 文件以创建用户表。现在,我想在我的用户模型中添加一个电子邮件列。最好的方法是什么?我是手动执行并手动编写迁移文件还是有快捷方式?如果我手动编写迁移,是否必须将其命名为与之前的迁移脚本相同的方式(前面带有时间戳)以保证它在之前的迁移之后运行?

【问题讨论】:

    标签: ruby-on-rails ruby


    【解决方案1】:

    不用担心时间戳。它将自动生成。 你可以做一个

    rails generate migration add_email_to_user email:string
    

    这将自动创建一个如下所示的迁移文件:

    class AddEmailToUser < ActiveRecord::Migration
      def self.up
        add_column :email, :string
      end
    
      def self.down
        remove_column :email
      end
    end
    

    该文件将在文件名前面附加YYYYMMDDHHMMSS 格式的时间戳(适用于 Rails 2.1 及更高版本)。

    【讨论】:

      【解决方案2】:

      Guide 包含有关生成迁移的信息。如果您使用 rails 生成器,它将创建正确命名的文件:

      ruby script/generate migration AddEmailToUser email:string
      

      【讨论】:

        【解决方案3】:

        你可以做两件事:

        1) 如果您还没有在任何地方部署它,或者您不介意转储数据库并再次运行迁移,请修改文件。从数据库中删除表,然后运行 ​​db:migrate。在开发中很容易做到这一点。

        2) 如果此应用正在生产中,或者您不想删除所有表格。然后创建一个新的迁移文件。然后在这个新的迁移中添加/修改/删除列。然后运行 ​​db:migrate ,新的更改将在您的表中生效。这是最佳做法。

        至于命名您的迁移,使用时间戳是因为 rails 会创建一个表来跟踪最新的迁移运行。为此,最好使用时间戳。但如果您选择,您可以使用自己的约定而不是时间戳。也许将它们命名为 001_migration.rb、002_migration.rb 等。

        希望对您有所帮助。

        【讨论】:

          猜你喜欢
          • 2018-11-25
          • 2012-05-26
          • 2015-05-13
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2016-02-07
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多