Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/55.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/url/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails 为Rails中安装的引擎强制URL尾部斜杠_Ruby On Rails_Url - Fatal编程技术网

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