根据http://blog.arkency.com/2014/11/dont-forget-about-eager-load-when-extending-autoload/我知道我可以使用config.paths.add "extras", eager_load: true
急切地在生产中加载目录。
但是对于[rails_root]/app/decorators
目录,即使在开发环境中,我也要求其下的所有文件都是急切加载的。
是否有Rails方法可以做到这一点?我还需要在宝石中做到这一点。
要详细说明,我的问题是我的gem提供了一个BaseDecorator类:
class BaseDecorator
### Extend corresponding model
def self.inherited(subclass)
subclass.model_class.class_eval do
define_method(:decorator) do
@_decorator ||= subclass.new(self)
end
end
end
def self.model_class
self.name.sub('Decorator','').constantize
end
end
用户将继承此类(例如TopicDecorator
)。完成后,我会自动创建一个decorator()
到Topic
模型,该模型将链接到新的TopicDecorator
实例。
但是,这意味着必须加载TopicDecorator
,否则模型将无法使用decorator()
方法。
我的意图是模型不应该知道它的装饰器存在。装饰者将完成扩展模型的工作。
我只是觉得这个实现应该很简单,需要的计算量更少。然而,有可能解决这个问题。