Ruby on rails 为Rails中安装的引擎强制URL尾部斜杠
我在主机应用程序中安装了一个名为Ruby on rails 为Rails中安装的引擎强制URL尾部斜杠,ruby-on-rails,url,Ruby On Rails,Url,我在主机应用程序中安装了一个名为Battalion的引擎,如下所示: mount Battalion::Engine => '/@:site_username' 营引擎在概念上与宿主应用程序不同;它有单独的资产,等等。我遇到的问题与后面的斜杠有关。当我访问路线http://localhost:3000/@jon我想被重定向到相同的路线,但后面有一个斜杠,如http://localhost:3000/@jon/ 这一点很重要,因为我希望在用户进入引擎后为资产使用相对URL 我知道可以应用于
Battalion
的引擎,如下所示:
mount Battalion::Engine => '/@:site_username'
营
引擎在概念上与宿主应用程序不同;它有单独的资产,等等。我遇到的问题与后面的斜杠有关。当我访问路线http://localhost:3000/@jon
我想被重定向到相同的路线,但后面有一个斜杠,如http://localhost:3000/@jon/
这一点很重要,因为我希望在用户进入引擎后为资产使用相对URL
我知道可以应用于链接帮助程序的
training_slash
选项,但我希望在控制器级别强制重定向,而不是每个链接。我也读过一篇文章,它提供了一个很好的解决方案,但在我的特殊情况下,它会中断,因为我在我的路线中使用了:site\u username
变量。结果表明,处理这一问题的最佳方法是对中的答案稍加修改。他的建议在这种情况下不太适用,因为引擎的URL中嵌入了一个参数。以下是我找到的解决方案:
在发动机的应用程序\u 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