ruby 在 rails 上:rails 上的比率 5?迁移错误中止

ruby on rails: ratyrate on rails 5? migration error aborted

经过长时间的中断后,我正试图回到 RoR,但在尝试 rails db:migrate:

时出现错误
rails aborted!
StandardError: An error has occurred, this and all later migrations canceled:

Directly inheriting from ActiveRecord::Migration is not supported. Please specify the Rails release the migration was written for:

错误继续...

我认为是因为 gem ratyrate

在其中一个迁移文件中:

class CreateRatingCaches < ActiveRecord::Migration

  def self.up
      create_table :rating_caches do |t|
        t.belongs_to :cacheable, :polymorphic => true
        t.float :avg, :null => false
        t.integer :qty, :null => false
        t.string :dimension
        t.timestamps
      end

      add_index :rating_caches, [:cacheable_id, :cacheable_type]
    end

    def self.down
      drop_table :rating_caches
    end

end

是因为rails 5 没有使用def self.up / def self.down吗?而应该使用 def change?

如果是这样,我可以将 def setf.up 更改为 def change 然后删除 def self.down 块吗?

除此之外,为什么在创建 table 时甚至有一个 def self.down 调用来删除 table?它不会被执行,只有当你 db:rollback 数据库吗?

谢谢

由于您继承自 ActiveRecord::Migration,迁移已取消。
因此,您应该从 ActiveRecord::Migration[5.1] 继承并且迁移应该有效。将第一行更改为:

class CreateRatingCaches < ActiveRecord::Migration[5.1]

(5.1指定rails版本,相应修改,如ActiveRecord::Migration[4.2]等)

有关它们不同方面的详细信息,请参阅官方指南中的this answer for more information about change vs. up/down in migrations or read this part