【问题标题】:Avoiding use of 'requires' in my delayed_job classes in /lib folder避免在 /lib 文件夹中的 delay_job 类中使用“requires”
【发布时间】:2010-08-15 03:29:54
【问题描述】:

我的/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”?

【问题讨论】:

    标签: ruby-on-rails delayed-job


    【解决方案1】:

    除非定义?(Foo)可以帮助:

    class Foo
      ..
    end unless defined?(Foo)
    

    这让我想起了将 my.h 的内容包含在 #ifndef .. #endif: 中的 C 模式:

    #ifndef _MY_H_
    #define _MY_H_
    
    #endif /* _MY_H_ */
    

    【讨论】:

      猜你喜欢
      • 2023-03-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多