缓存的 Ruby Haml 块返回空
Posted
技术标签:
【中文标题】缓存的 Ruby Haml 块返回空【英文标题】:Cached Ruby Haml Block returns empty 【发布时间】:2021-01-17 12:45:33 【问题描述】:我正在 HAML 代码中执行一些缓存,其中还包括逻辑:
- Rails.cache.fetch('unique_key') do
some text
- if false
more text
初始渲染按预期工作,但后续调用返回空白。
我怀疑后面的if
语句是原因。
任何解释为什么会这样?任何建议如何克服它?
按预期工作的不优雅的解决方案是附加一些尾随虚拟块:
- Rails.cache.fetch('unique_key') do
some text
- if false
more text
%div.blank
谢谢
【问题讨论】:
perform_cache
是自定义方法吗?
嗨,雅科夫——不。是伪代码:Rails.cache.fetch - 我更新了问题以澄清,谢谢。
你想完成什么?
希望缓存整个块,但似乎只有逻辑的结果(如果为false,即nil)被放入缓存中。
【参考方案1】:
在块中评估的最后一条语句是if false
。该语句的结果是nil
。并且这个值存储在缓存中。当您添加%div.blank
时,存储在缓存中的结果将是这样的some text\n%div.blank
。我会为视图使用标准助手 cache('key')
它应该在这两种情况下都可以正常工作。
【讨论】:
为什么存储的是nil,而不是一些文本+\n+nil? 谢谢,我去看看 ActionView::Helpers::CacheHelper.cache 我不确定,但我猜内容存储在某个缓冲区中,当您调用%div.blank
时,它会被释放,但- if false
的评估结果为nil
。如果您将其更改为 = if true
,您将看到两次相同的文本。以上是关于缓存的 Ruby Haml 块返回空的主要内容,如果未能解决你的问题,请参考以下文章