我们刚刚在 Rails 应用程序中添加了几个观察者。现在,当从头开始运行迁移时,我们会收到一个错误,指出表不存在(呃,我们还没有迁移)。抛出该错误是因为正在加载模型中的插件,该插件要求提供 column_names。
我假设观察者导致模型被加载,因为当我们在 application.rb 中注释掉观察者行时,不会引发错误。
如何在不加载观察者和模型的情况下运行迁移?
或者
如何以在运行迁移时不会引发错误的方式在插件中请求 column_names?
我们刚刚在 Rails 应用程序中添加了几个观察者。现在,当从头开始运行迁移时,我们会收到一个错误,指出表不存在(呃,我们还没有迁移)。抛出该错误是因为正在加载模型中的插件,该插件要求提供 column_names。
我假设观察者导致模型被加载,因为当我们在 application.rb 中注释掉观察者行时,不会引发错误。
如何在不加载观察者和模型的情况下运行迁移?
或者
如何以在运行迁移时不会引发错误的方式在插件中请求 column_names?
在 Rails 3 中,您可以通过确定 Rake 是否正在运行来跳过添加观察者:
config.active_record.observers = :my_model_observer unless File.basename($0) == 'rake'
这会关闭观察者,这意味着模型和插件不会被加载。
我还没有找到一种在运行时禁用观察者的体面方法。这已在先前在 rake 任务期间关闭观察者的简单方式中讨论过?
但是,我想您可以通过在迁移中重新定义麻烦的模型来从模型中“拔出”插件代码:
class YourMigration < ActiveRecord::Migraation
class YourModel < ActiveRecord::Base; end
def self.up
...
end
def self.down
...
end
end
在您的模型中,您可以捕获运行迁移时生成的特定异常。