我坚持认为Rails Web应用程序中的一个非常简单/常见的用例。我想使用" caches_action,layout:false"并从布局中显示将由操作设置的动态标签(来自视图或控制器)。
我找不到任何标准的rails方式来执行此操作,因为 content_for 不能与 caches_action 一起使用,实例变量不会缓存(?),以及元标记辅助宝石我尝试过的(metamagic和meta-tags)不支持此用例。
有没有办法做到这一点?
我在SandboxController上使用caches_action,layout:false#show method
#app/controllers/sandbox_controller.rb
class SandboxController < ApplicationController
caches_action :show, layout: false, expires_in: 1.minute
def show
@meta_title = "Best page ever"
do_some_expensive_operation
end
end
视图
#app/views/sandbox/show.html.erb
We are in show action.
布局
#app/views/layouts/application.html.erb
<title><%= @meta_title %></title>
Debug: <%= @meta_title %> <br/>
<%= yield %>
谢谢!
答案 0 :(得分:1)
我找到了一种让它工作的方法,它不像我希望的那样漂亮,但它有助于使用caches_action并从视图中设置HTML元标记。
此外,为了记录,似乎这被遗忘并埋藏在管道深处,因为我没有找到any recent mentions of this problem,只有caches_action和content_for在一起are not expected to work.
解决方案:我只需使用尽可能少的计算来添加before_action来设置元标记。
#app/controllers/sandbox_controller.rb
class SandboxController < ApplicationController
caches_action :show, layout: false, expires_in: 1.minute
before_action :seo_show, only: :show
def seo_show
@meta_title = "Best page ever"
end
def show
do_some_expensive_operation
end
end
值得注意的是,它也可以与metamagic gem结合使用。
布局:
#app/views/layouts/application.html.erb
<%= default_meta_tags && metamagic %>
<%= yield %>
帮助者:
#app/helpers/application_helper.rb
module ApplicationHelper
def default_meta_tags
meta title: @meta_title || "Default meta-title of my website"
end
end
希望这有助于那里的人!