gpt4 book ai didi

ruby-on-rails - 如何在布局 :false and dynamically change meta tags? 中使用 Rails caches_action

转载 作者:塔克拉玛干 更新时间:2023-11-03 02:31:23 25 4
gpt4 key购买 nike

我被困在我认为是 Rails 网络应用程序中非常简单/常见的用例上。我想使用“caches_action, layout:false”并从布局中显示将由操作设置的动态标签(来自 View 或 Controller )。

我找不到任何标准的 Rails 方法来执行此操作,因为 content_for 不适用于 caches_action,实例变量未缓存(?),元标记助手 gems我试过的(metamagicmeta-tags)不支持这个用例。

有什么办法吗?

例子

我在 SandboxController#show 方法上使用 caches_action, layout:false

#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 %>

谢谢!

最佳答案

我找到了一种让它工作的方法,它不像我希望的那样漂亮,但它有助于使用 caches_action 并从 View 中设置 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

希望这对外面的人有帮助!

关于ruby-on-rails - 如何在布局 :false and dynamically change meta tags? 中使用 Rails caches_action,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36176354/

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