到目前为止,缓存是我的视图代码中逻辑最密集的部分,所以我想从装饰器内部进行片段缓存,但是我做不到。
当我从我的装饰器中这样做时:
def cached_name
h.cache do
"a name here"
end
end
我明白了:
当你没想到时,你有一个 nil 对象!您可能期望有一个 Array 的实例。评估 nil.length 时发生错误
我从控制器内部实例化我的装饰器
@presenter = SomePresenter::new
我正在使用 HAML 来表达我的观点
我怎样才能成功地从我的装饰器中缓存,所以我的视图可以做这样的事情
= @decorator.cached_logic_heavy_stuff
更新:我创建了一个 git repo 来显示我的问题:https ://github.com/houen/presenter_caching
更新:这可能有效 - 请参阅回购
include Haml::Helpers
def another_way_to_try
self.init_haml_helpers
buffer = haml_buffer.buffer
h.with_output_buffer(buffer) do
h.cache do
h.concat "i should still not be empty"
end
end
end