假设我们的网站中有用户的路径,在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
时,这个约束就会失败。 / p>
问题是何时匹配请求,Rails将使用原始传入格式,当构造路径时,它将使用解码格式。
如何处理这种情况?
我正在使用Rails 3.2.12。