【问题标题】:Rails redirect scoped routesRails 重定向范围路由
【发布时间】:2016-04-12 11:08:14
【问题描述】:

我有一个具有以下范围路由的应用:

scope "(:locale)", :locale => Regexp.new(I18n.available_locales.join('|')) do
  # ...
  # lots of routes here
  # ...
end

如您所见,“语言环境”在这里是可选的。 http://myapp.com/en/foohttp://myapp.com/foo 都以相同的控制器#action 结束。效果很好。

现在我想摆脱 url 中的语言环境,但我希望旧路由仍然有效,所以简单地删除范围语句是行不通的。我想将基于旧语言环境的 url 重定向到非语言环境 url。像这样:

http://myapp/en/foo 重定向到http://myapp/foo

http://myapp/foo 仍然像以前一样工作。

到目前为止,我只在 Rails 指南中为个别路线提供了found 一个“重定向”选项。但我希望这适用于一系列路线;我的“范围”块中的路线。

关于如何让它发挥作用的任何想法?

【问题讨论】:

  • @Hieu Pham 感谢您的参与,但您的解决方案没有进行重定向:|
  • 嘿!该解决方案已被接受,它在我的答案上方,我认为它会起作用,我很久以前就为您的问题添加了书签,所以现在我刚刚看到了一个解决方案,请注意:)
  • @Hieu Pham 欣赏!

标签: ruby-on-rails redirect scope routing


【解决方案1】:

我的猜测 - 来自不同模式的大量 url 剥离实验 - 类似这样的东西对你有用:

scope "(:locale)", :locale => Regexp.new(I18n.available_locales.join('|')) do
    get '/en/:ccc' => redirect(path: "%{ccc}")
end

路径可能需要在变量前加一个斜杠,当然你也可以去掉不同的语言代码。

这里最大的烦恼是重定向提供两个不同的类,具体取决于哈希或字符串 - OptionRedirectPathRedirect。在撰写本文时,选项重定向可让您对变量做更多的事情。

【讨论】:

    猜你喜欢
    • 2015-06-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-08-02
    • 2011-12-20
    相关资源
    最近更新 更多