如何在Rails 2.3.5中转义link_to:id值

问题描述

| 在Rails 2.3.5 我认为生活在这样的URL上的用户的公共信息是: http://www.mysite.com/users/johndoe 我的路线:
map.connect \'members/:id\',:controller => \"users\",:action => \"showmember\"
我从不想公开用户的int ID,所以我将用户名用作该视图的ID。 当我链接到它时:
<%=link_to user.username,:controller => \'users\',:action => \'showmember\',:id => user.username %>
一切正常,除非用户名恰好包含需要转义的字符。在link_to中转义ID的最佳方法是什么?     

解决方法

        
CGI::escape(user.username)
该方法将对值进行URI编码,因此在URL中是安全的。 Rails不会自动执行吗?您是否尝试过不逃避并将疯狂的角色放入其中? 编辑,和相反的版本:
CGI::unescape(params[:id])
尽管我仍然觉得Rails可能会自动为您处理。可能要测试。 再次编辑: Rails确实有一个
.parameterize
方法,因此:
user.username.parameterize
将使字符串对URL友好,请参见此处:http://apidock.com/rails/v3.0.7/String/parameterize 这样做的主要问题是,如果您有2个用户名:
my.user
myuser
,它们都将参数化为相同的字符串
myuser
我认为这样做的可接受方式是(如doc示例所示):
\"#{user.id}-#{user.username.parameterize}\"
这样,如果您执行
User.find(params[:id])
,它将删除第一个数字之后的所有内容,并将其用作ID。如果您确实反对在参数中包含用户ID,那么有一些gem可以使您使用一个唯一的参数友好的字符串(这是出于这个原因吗?)。这样的宝石之一就是friendly_id:https://github.com/norman/friendly_id/,尽管还有其他宝石。这个想法是模型上还有一个专门用于url的字段,它是根据用户名字段在before_create上自动生成的。它必须是唯一的且参数友好的,这是gem负责的。 希望这个答案可以帮助您更多:p     ,        问题不在于转义,我最终根据以下问题调整了路线: Rails查询带有句点(或句号)的字符串。     

相关问答

依赖报错 idea导入项目后依赖报错,解决方案:https://blog....
错误1:代码生成器依赖和mybatis依赖冲突 启动项目时报错如下...
错误1:gradle项目控制台输出为乱码 # 解决方案:https://bl...
错误还原:在查询的过程中,传入的workType为0时,该条件不起...
报错如下,gcc版本太低 ^ server.c:5346:31: 错误:‘struct...