1

我试图允许用户通过他们的用户名访问他们的帐户,无论他们如何在 URL 中大写它。因此http://example.com/Username将与http://example.com/username进入同一页面。

我对 URL 的任何其他部分区分大小写感到满意(我知道这是标准),但我认为没有必要强制用户在 URL 中获取正确的用户名大小写。

这可以通过单独在 routes.rb 文件中添加某些设置来完成吗?

我认为这很简单,但显然不是。

我在这里发现了一个看似简单的问题,但我认为只有一个答案会有所帮助,而且太老套了(作者自己承认)

4

2 回答 2

5

我相信这不是路由问题,您可以在控制器代码中解决它:

User.where("lower(username) = lower(?)", params[:username]).first!

或者

User.where("lower(username) = ?", params[:username].downcase).first!

或者

User.find(:first, :conditions => [ "lower(username) = ?", params[:username].downcase ])
于 2012-12-03T21:08:40.667 回答
1

在控制器中处理这种行为应该可以正常工作,而不是在路由中。

# config/routes.rb
match ':username' => 'users#show'

# app/controllers/users_controller.rb
def show
  username = params[:username]
  user = User.find_by_username(username) || User.find_by_username(username.downcase) 
  # or something along these lines...
end

一个更好的解决方案可能是为用户存储某种类型的slug标识,该标识始终被小写并准备好在 URL 中使用。为此,您可以查看一下很棒的friendly_id gem

于 2012-12-03T21:02:30.043 回答