从 YML 文件设置 rails 重定向

Posted

技术标签:

【中文标题】从 YML 文件设置 rails 重定向【英文标题】:Set rails redirections from YML file 【发布时间】:2021-11-14 02:32:46 【问题描述】:

我目前有一个 YML 文件,其中包含一堆重定向 URL,遵循简单的语法 old_url: new_url.

当我在我的应用程序上加载这个 YML 文件时,我最终得到了一个键和值的散列。

目前,我没有使用此 YML,并且我的所有重定向都手动添加到重定向文件中,这意味着我有一个非常大的文件,其中手动添加了 150 多个重定向,遵循以下语法:

get 'old_url', to: redirect('new_url', status: 301)

我想做的是删除所有这些行,并改用我在 YML 文件中的“键/值”对。 最好的方法是什么?

我认为这就像在重定向文件中迭代我的哈希一样简单,但它似乎不起作用,我不确定这是一种真正干净的方法

非常感谢

【问题讨论】:

这就像在重定向文件中迭代哈希一样简单。贴一些代码。你都尝试了些什么。应该发生什么,而不是发生了什么。 经过一番挖掘,它可以工作,但实际上只是规范没有通过。我认为在这种情况下,我将需要找到另一种编码方式,否则我将无法保持测试通过 【参考方案1】:

以下内容应该可以在您的config/routes.rb 中使用:

redirects = YAML.load_file(Rails.root.join('path/to/redirects.yaml'))
redirects.each do |old, new|
  get old, to: redirect(new, status: 301)
end

请注意,您需要更改路径和文件名以匹配您的 YAML 文件的路径和文件名。

【讨论】:

在这里提出一个很好的观点。虽然路由有一个非常特定的 DSL,但它只是一个常规 Ruby 文件,您可以在其中使用常规 Ruby 语法。 谢谢,不知道为什么它不起作用,但可能是一些语法问题!

以上是关于从 YML 文件设置 rails 重定向的主要内容,如果未能解决你的问题,请参考以下文章

Rails设置超时立即重定向

乘客(Ruby on Rails)中的301重定向从根域到www子域?

从 Symfony2 中的 routing.yml 将一条路由重定向(301)到另一条路由

从 Rails 应用程序注销时没有重定向

Ruby-on-Rails:如何摆脱“你被重定向”页面

可以在 Rails 中创建此重定向路线吗?