我有一个名为Battalion
的引擎安装到我的主机应用程序中,如下所示:
mount Battalion::Engine => '/@:site_username'
Battalion
引擎在概念上与主机应用程序不同;它有单独的资产等。我遇到的问题与尾部斜杠有关。当我访问路线http://localhost:3000/@jon
时,我希望被重定向到相同的路线,但使用尾部斜杠,例如http://localhost:3000/@jon/
。
这很重要,因为我想在用户进入引擎后使用资产的相对URL。
我知道可以应用于链接帮助程序的trailing_slash
选项,但我希望在控制器级别强制执行重定向,而不是为每个链接强制执行重定向。我还阅读了blog post提供了一个很好的解决方案,但它在我的特定情况下中断,因为我在我的路线中使用了:site_username
变量。
答案 0 :(得分:1)
原来处理这个问题的最佳方法是对this post中的答案进行略微修改。他的建议在这种情况下并不适用,因为引擎的URL中嵌入了一个参数。这是我找到的解决方案:
在引擎的application_controller.rb
中:
def ensure_trailing_slash
redirect_to url_for(params = :trailing_slash => true), :status => 301 unless trailing_slash?
end
def trailing_slash?
request.env['REQUEST_URI'].match(/[^\?]+/).to_s.last == '/'
end
在包含根路径的控制器中:
before_filter :ensure_trailing_slash, :only => :index