Ruby on Rails中的路由是区分大小写的。似乎以前有人提出过这个问题,而且它已经被标记为将不会修复。
http://rails.lighthouseapp.com/projects/8994/tickets/393-routes-are-case-sensitive
这让我感到很不幸,因为我真的没有看到我自己的路线应用程序对大小写敏感的任何好处,而在我看来,它可能会造成混乱和缺乏润色的普遍外观。
使路由不区分大小写的最佳方法是什么?
我在谷歌搜索中发现了这个提示:
map.connect "web_feeds/:action", :controller => 'web_feeds', :action => /[a-z_]+/i
这很聪明,但它仍然使网址的web_feeds部分区分大小写.我没有看到任何类似的方法,但是,如果不手动输入wEb_feEds的每一个可能的组合,但这显然是一个可怕的解决方案,因为任何原因.
7条答案
按热度按时间plupiseo1#
Rails中的路由是区分大小写的,因为URL是区分大小写的。
URL通常是区分大小写的(计算机名称除外)。可能有URL或URL的某些部分不区分大小写,但识别它们可能并不容易。用户应始终考虑URL是区分大小写的。
mutmk8jj2#
我刚刚遇到了同样的问题,并使用中间件解决了它-看看这里:
http://gehling.dk/2010/02/how-to-make-rails-routing-case-insensitive/
注意:这仅适用于Rails 2.3+
w80xi6nr3#
你可以尝试另一种方法,把case转换到服务器端,然后把所有的东西都发送到rails downcase。
我想你可以用mod_rewrite或者mod_spelling来实现这一点。
u4dcyp6a4#
一个简单的解决办法是,可能不是一个优雅的方式,但仍然可行的是:在应用程序控制器中使用before_filter,如下所示。
正如我已经说过的,这不是一个优雅的,但可行的,所以请不要下票。:P
tjrkku2a5#
只需在默认情况下将其修改为小写即可。简单示例:
qfe3c7zg6#
虽然URL是区分大小写的,但如果你想让你的路由不区分大小写,你可以做一个肮脏的黑客。
在application_controller.rb中输入:
但实际上不要这样做。你为任何不存在的路由创建了一个重定向循环。你真的应该把request.request_uri解析成它的组件,把它们小写,然后用它们来生成你重定向到的合法路由。正如我刚才提到的,这是一个肮脏的黑客行为。但是,我认为这比让你的路由图变得丑陋和黑客行为要好。
pgvzfuti7#
(多年后发布)
如果您只想寻找不区分大小写的特定路由,就像我的例子一样,那么我最终会做以下事情。
假设您的路线是
这将解析
/item/123
,但不能解析/ITEM/123
或Item/123
。您可以使用一个段约束,将
item
作为一个参数,并添加一个默认值,这样您的路线帮助器就不需要指定它(因此保持它们与上面的原始路线相同):如果您在
/item
下有多个路由,您可以将此概念概括为一个范围: