0

我的/lib 文件夹中有一个类,我的delayed_job 守护程序调用它来处理Foo 类型的对象。如果我在工作类中没有“需要'foo'”,那么它不知道如何处理从数据库中获取的 YAML,我会收到“未定义的方法”错误。添加“需要'foo'”显然会解决这个问题,这是通常的解决方案。

但是..问题是我在 Foo 类中有 counter_cache=>true。因此,当 DJ 守护进程加载 Rails 环境时,会自动加载 Foo 并为我的 counter_cache 添加回调。然后,delayed_job 守护进程运行,执行“需要'foo'”,它乖乖地重新加载 Foo 并为 counter_cache 添加另一个回调,这导致我的 counter_cache 为添加或删除的每一行更新两次。

有没有办法包装 :counter_cache=>true 所以它只运行一次?有没有办法让我的 DJ 工人类使用“Foo”类型的对象而不必显式使用“requires”?

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 回答