[7.1]在迁移中意味着什么

lei*_*lei 2 ruby ruby-on-rails ruby-on-rails-7

在下面的 ruby​​ 代码中,什么[7.1]意思?

class AddInitialProducts < ActiveRecord::Migration[7.1]
  def up
    5.times do |i|
      Product.create(name: "Product ##{i}", description: "A product.")
    end
  end

  def down
    Product.delete_all
  end
end
Run Code Online (Sandbox Code Playgroud)

小智 5

ActiveRecord::Migration[] 类具有此处定义的链接到兼容性模块的方法。

通过指定正在运行迁移的 Rails 版本,可以确保Migration在升级 Rails 时该类的新功能不会与迁移发生冲突。

模块的注释中有很好的解释Compatibility

      # This file exists to ensure that old migrations run the same way they did before a Rails upgrade.
      # e.g. if you write a migration on Rails 6.1, then upgrade to Rails 7, the migration should do the same thing to your
      # database as it did when you were running Rails 6.1
      #
      # "Current" is an alias for `ActiveRecord::Migration`, it represents the current Rails version.
      # New migration functionality that will never be backward compatible should be added directly to `ActiveRecord::Migration`.
      #
      # There are classes for each prior Rails version. Each class descends from the *next* Rails version, so:
      # 7.0 < 7.1
      # 5.2 < 6.0 < 6.1 < 7.0 < 7.1
      #
      # If you are introducing new migration functionality that should only apply from Rails 7 onward, then you should
      # find the class that immediately precedes it (6.1), and override the relevant migration methods to undo your changes.
      #
      # For example, Rails 6 added a default value for the `precision` option on datetime columns. So in this file, the `V5_2`
      # class sets the value of `precision` to `nil` if it's not explicitly provided. This way, the default value will not apply
      # for migrations written for 5.2, but will for migrations written for 6.0.
Run Code Online (Sandbox Code Playgroud)