假设我们在我们的站点中有一条用户路径,其定义如下routes.rb
get '/users/:username' => 'users#show', as: 'u', constraints: {username: /[A-Za-z0-9\_]+/}
它运行良好,无效的用户名会通过,然后有一天,我们决定允许人们使用汉字作为用户名的一部分,格式将扩展为/[\u4e00-\u9fa5A-Za-z0-9_]/
. 那么问题来了,因为汉字会被编码成%FF
格式化字符串,我们不能使用那个约束,如何正确定义约束,让规则像以前一样工作呢?
我试图退后一步,只是为了让路由工作,使用/[%A-Za-z0-9\_]+/
格式,收入请求至少会工作,但是当我调用时u_path
,这个约束就会失败。
问题是在匹配请求时,Rails 会使用 origin 传入格式,而在构造路径时,会使用解码后的格式。
如何处理这种情况?
我正在使用 Rails 3.2.12。