1

我们刚刚在 Rails 应用程序中添加了几个观察者。现在,当从头开始运行迁移时,我们会收到一个错误,指出表不存在(呃,我们还没有迁移)。抛出该错误是因为正在加载模型中的插件,该插件要求提供 column_names。

我假设观察者导致模型被加载,因为当我们在 application.rb 中注释掉观察者行时,不会引发错误。

如何在不加载观察者和模型的情况下运行迁移?

或者

如何以在运行迁移时不会引发错误的方式在插件中请求 column_names?

4

3 回答 3

5

在 Rails 3 中,您可以通过确定 Rake 是否正在运行来跳过添加观察者:

config.active_record.observers = :my_model_observer unless File.basename($0) == 'rake'

这会关闭观察者,这意味着模型和插件不会被加载。

于 2011-09-20T16:19:00.650 回答
1

我还没有找到一种在运行时禁用观察者的体面方法。这已在先前在 rake 任务期间关闭观察者的简单方式中讨论过?

但是,我想您可以通过在迁移中重新定义麻烦的模型来从模型中“拔出”插件代码:

class YourMigration < ActiveRecord::Migraation
  class YourModel < ActiveRecord::Base; end

  def self.up
    ...
  end

  def self.down
    ...
  end
end
于 2011-09-13T05:29:33.523 回答
0

在您的模型中,您可以捕获运行迁移时生成的特定异常。

于 2011-09-12T22:32:03.133 回答