1

Railsアプリケーションに2人のオブザーバーを追加しました。これで、移行を最初から実行すると、テーブルが存在しないというエラーが表示されます(まあ、まだ移行していません)。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 に答える