Как избежать использования 'require' в моих классах delayed_job в папке / lib - PullRequest
0 голосов
/ 14 августа 2010

В моей папке / lib есть класс, который мой демон delayed_job вызывает для работы с объектом типа Foo. Если в рабочем классе у меня нет слова "требует 'foo'", то он не знает, что делать с YAML, полученным из БД, и я получаю ошибку "неопределенный метод". Добавление в "require 'foo'", очевидно, исправит это, что является обычным решением.

Но .. проблема в том, что у меня есть counter_cache => true в классе Foo. Так что получается, что когда диджей DJ загружает среду Rails, Foo загружается автоматически и добавляется обратный вызов для моего counter_cache. Затем демон delayed_job запускается, выполняет «require 'foo'", и он послушно перезагружает Foo и добавляет еще один обратный вызов для counter_cache, в результате чего мой counter_cache обновляется дважды для каждой добавленной или удаленной строки.

Есть ли способ обернуть: counter_cache => true, чтобы он запускался только один раз? Есть ли способ заставить мой рабочий класс диджея использовать объект типа 'Foo' без необходимости явно использовать 'require'?

1 Ответ

0 голосов
/ 14 августа 2010

если не определено? (Foo) может помочь:

class Foo
  ..
end unless defined?(Foo)

Это напоминает мне шаблон C, заключающий содержимое my.h в #ifndef .. #endif:

#ifndef _MY_H_
#define _MY_H_

#endif /* _MY_H_ */
...