gpt4 book ai didi

ruby-on-rails - 是否有使用 caches_action 和 :layout => false? 忽略 content_for block 的解决方法

转载 作者:行者123 更新时间:2023-12-03 11:43:36 24 4
gpt4 key购买 nike

当您使用 caches_action :layout => false在 Rails 3 中,在缓存 View 中填充并在布局中使用的任何 content_for 块最终都为空。有什么解决方法吗?

例如。在我的应用程序中,我有以下相当典型的设置。

从我的 View 中调用的辅助方法设置页面标题:

# application_helper.rb
def page_title(title)
content_for(:page_title) { title }
end

我的布局文件中的一行如下
# application.html.erb
<head>
<title><%= yield(:page_title) %></title>
</head>

在我看来,我可能会打电话
# index.html
<% page_title 'Hello!' %>

当然,如果您使用 :layout => false 缓存您的操作,这会导致页面标题为空白,因为 Action 缓存会忽略所有 content_for 块。

没有解决方法吗? Action 缓存 :layout => false非常接近于非常有用,但是这个小故障使它变得非常尴尬。

其他人询问或评论同一问题:
  • http://groups.google.com/group/rubyonrails-talk/browse_thread/thread/d8d72f050701d44b
  • http://www.golygon.com/2011/04/tips-and-tricks-in-ruby-on-rails/
  • https://rails.lighthouseapp.com/projects/8994/tickets/4140-action-caching-with-caches_action-and-layout-false

  • Rails documentation注意到这种行为:

    “警告:content_for 在缓存中被忽略。所以你不应该将它用于将被片段缓存的元素。”

    最佳答案

    我相信我解决这个问题的方法是创建依赖于 content_for 填充的头部分的片段缓存。

    所以它看起来像这样:

    # application.html.erb
    <head>
    <% cache("#{request.env['PATH_INFO']}/header") do %>
    <title><%= yield(:page_title) %></title>
    <% end %>

    所以这个缓存的片段应该在缓存 Action 的同时填充。

    关于ruby-on-rails - 是否有使用 caches_action 和 :layout => false? 忽略 content_for block 的解决方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8177011/

    24 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com