我有一个模型,我想“注册”有关列的元数据,例如初始化程序中的标签说明。
在此过程中,我想检查该列是否实际存在,如果不存在,请加注。
但是,直到运行添加列的迁移操作后,该列才存在。
因此,如果要出于迁移目的而初始化环境,那么我希望跳过此检查。
有没有办法知道迁移正在运行?还是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
答案 0 :(得分:1)
当您尝试加载视图时,如何检查是否有挂起的迁移(如服务器一样)。
有ActiveRecord::Migration.check_pending!,如果有this link,它会加ActiveRecord::PendingMigrationError
。但是它在后台使用了connection.migration_context.needs_migration?
逻辑,因此可以像下面这样检查:
ActiveRecord::Base.connection.migration_context.needs_migration?
我了解,它并不能直接回答您的问题,但是它暗示了一种可能的替代方法。