缓存的 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 块返回空的主要内容,如果未能解决你的问题,请参考以下文章

如何在 Haml 中编写 if 条件?

Ruby HAML 与 Django?

HAML 中 Javascript 中的 Ruby 方法

malloc/new 是不是从缓存或 RAM 返回内存块?

从 ruby​​ on rails 中删除 new.haml/new.erb?

ruby _form.html.haml