0

/lib フォルダにクラスがあり、delayed_job デーモンが Foo 型のオブジェクトを処理するために呼び出すクラスがあります。ワーカー クラスに「requires 'foo'」がない場合、DB から取得した YAML をどう処理するかがわからず、「undefined method」エラーが発生します。「requires 'foo'」を追加すると、明らかにこれが修正されます。これが通常の解決策です。

しかし..問題は、Foo クラスに counter_cache=>true があることです。DJ デーモンが Rails 環境をロードすると、Foo が自動ロードされ、counter_cache にコールバックが追加されます。次に、delayed_job デーモンが実行され、「requires 'foo'」が実行され、素直に Foo がリロードされ、counter_cache に別のコールバックが追加されます。その結果、counter_cache は行が追加または削除されるたびに 2 回更新されます。

:counter_cache=>true をラップして 1 回だけ実行する方法はありますか? 「requires」を明示的に使用せずに、DJ ワーカー クラスで「Foo」タイプのオブジェクトを使用する方法はありますか?

4

1 に答える 1

0

定義されていない限り?(Foo)は役立つ可能性があります:

class Foo
  ..
end unless defined?(Foo)

my.hの内容を#ifndef..#endifに囲むCパターンを思い出させます:

#ifndef _MY_H_
#define _MY_H_

#endif /* _MY_H_ */
于 2010-08-14T19:29:54.027 に答える