如何在Rails 3中生成带有尾部斜杠的链接?

13
我正在将现有的 PHP 网站迁移到 Ruby on Rails 3 平台,并且需要保持原来的 URL 不变。
我已经有了路由:

get 'companies/' => 'companies#index', :as => :companies

在一个视图文件中,我有以下代码:

link_to 'Companies', companies_path

这将生成URL "http://website.com/companies",而不是 "http://website.com/companies/"。

我希望URL末尾有斜杠。是否可能实现?


我可以问一下吗?为什么你需要保留这个斜杠?(这不是RESTful的方式) - bor1s
这是为了搜索引擎优化的目的。具有此URL的页面已经存在,在这种情况下重定向并不是解决方案。 - Aleksandr Shvalev
1
我需要相对URL的尾部斜杠。 - hiroshi
4个回答

37

你可以将以下内容添加到你的application.rb中:

config.action_controller.default_url_options = { :trailing_slash => true }

这样所有的路由都将自动生成尾斜线,无需修改项目中的每个链接。


23

只需按照以下步骤进行:

link_to 'Companies', companies_path(:trailing_slash => true)

这里有文档。


太棒了!我之前不知道 :trailing_slash 这个选项。 - Ryan Bigg
1
非常感谢!它有效了!但是也许你知道,在routes.rb中是否有一种方法可以使Rails自动添加尾随斜杠,如果它存在于url模式中? - Aleksandr Shvalev
如果您知道,请在此处提供解决方案:链接 - Aleksandr Shvalev

3

我找不到任何参考文献,但是在路由定义中添加 trainling_slash: true 也可以生效(并避免重复操作)。

get 'companies/' => 'companies#index', :as => :companies, :trailing_slash => true

这是使用Rails 3.2.13进行测试的:
rails c
1.9.3p327 :005 > app.companies_path
=> "http://www.example.com/companies/

如果你想将这个解决方案应用到特定的路由上,这是一个不错的选择。 - Mirko Akov

0

适用于rails 3.2:

Rails.application.routes.default_url_options[:trailing_slash]= true

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接