2010-08-14 5 views
0

У меня есть класс в папке my/lib, который мой daemon delayed_job вызывает для работы с объектом типа Foo. Если у меня нет «требует« foo »в рабочем классе, тогда он не знает, что делать с YAML, который он получает из БД, и я получаю ошибку« неопределенного метода ». Добавление в «требует« foo », очевидно, исправит это, что является обычным решением.Избегайте использования 'требует' в моих классах delayed_job в папке/lib

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

Есть ли способ обертывания: counter_cache => true, поэтому он запускается только один раз? Есть ли способ заставить моего рабочего класса DJ использовать объект типа «Foo» без необходимости явно использовать «требует»? ?

ответ

0

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

class Foo 
    .. 
end unless defined?(Foo) 

Это напоминает мне C образец ограждающих содержимое my.h в #ifndef .. #endif:

#ifndef _MY_H_ 
#define _MY_H_ 

#endif /* _MY_H_ */