有没有办法知道迁移正在运行?

时间:2018-07-24 09:25:18

标签: ruby-on-rails ruby-on-rails-5

我有一个模型,我想“注册”有关列的元数据,例如初始化程序中的标签说明。

在此过程中,我想检查该列是否实际存在,如果不存在,请加注。

但是,直到运行添加列的迁移操作后,该列才存在。

因此,如果要出于迁移目的而初始化环境,那么我希望跳过此检查。

有没有办法知道迁移正在运行?还是db:migrate瑞克任务触发了环境的加载...

class Preferences < ActiveRecord::Base
  def self.register(attrs)
    raise if migration_not_running? && !column_names.include?(attrs.fetch(:column_name))
    @schema << atrs
  end

  def self.schema
    @schema ||= []
  end

  private

  def self.migration_not_running?
    # ...?
  end    
end

1 个答案:

答案 0 :(得分:1)

当您尝试加载视图时,如何检查是否有挂起的迁移(如服务器一样)。

ActiveRecord::Migration.check_pending!,如果有this link,它会加ActiveRecord::PendingMigrationError。但是它在后台使用了connection.migration_context.needs_migration?逻辑,因此可以像下面这样检查:

ActiveRecord::Base.connection.migration_context.needs_migration?

我了解,它并不能直接回答您的问题,但是它暗示了一种可能的替代方法。