gpt4 book ai didi

ruby-on-rails - 为 Rails 编写元刷新方法

转载 作者:太空宇宙 更新时间:2023-11-03 16:11:44 24 4
gpt4 key购买 nike

我想要 app/controllers/application.rb 中的一个方法,它可以将文本添加到呈现的任何模板中。当然,我不能两次调用渲染而不会出现双重渲染错误,所以这可能吗?

我想在延迟后使用元刷新进行重定向。这是我得到的:

app/controllers/application_controller.rb:

def redirect_after_delay (url, delay)
@redirect_delay = delay
@redirect_url = url
render
end

app/views/layouts/application.html.erb

<!DOCTYPE html>
<html lang="en">
<head>
<%= yield :refresh_tag %>
</head>

<body>
<%= yield %>
</body>
</html>

那么如果我想添加延迟后重定向,我将以下内容添加到 1) 我的 Controller 和 2) 操作的 View :
app/controllers/my_controller.rb

def my_action
redirect_after_delay 'http://www.google.com', 3 if some_condition
end

app/views/my_controller/my_action.html.erb

<% content_for :refresh_tag do %>
<meta http-equiv='refresh' content='<%=@redirect_delay%>;url=<%=@redirect_url%>'>
<% end %>
<h1>Please wait while you are redirected...</h1>

content_for block 永远不会改变,是否可以以某种通用方式执行此操作,这样我就不必输入 <%= yield :refresh_tag %>在每个模板中? (例如 redirect_after_delay 可以将它添加到任何要呈现的模板中吗?)

最佳答案

您无需在 HTML 中放置任何内容,也无需担心模板。元标记相当于一个 HTTP header ,使用 Rails 发送它非常容易,例如在你的 Controller 中:

def my_action
header['Refresh'] = "5"
render :my_view
end

或者您可以将其重构为 ApplicationController 中的方法

def redirect_after_relay(url, delay)
header['Refresh'] = "#{delay}; url=#{url}"
end

关于ruby-on-rails - 为 Rails 编写元刷新方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2170372/

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