我试图允许用户通过他们的用户名访问他们的帐户,无论他们如何在 URL 中大写它。因此http://example.com/Username将与http://example.com/username进入同一页面。
我对 URL 的任何其他部分区分大小写感到满意(我知道这是标准),但我认为没有必要强制用户在 URL 中获取正确的用户名大小写。
这可以通过单独在 routes.rb 文件中添加某些设置来完成吗?
我认为这很简单,但显然不是。
我试图允许用户通过他们的用户名访问他们的帐户,无论他们如何在 URL 中大写它。因此http://example.com/Username将与http://example.com/username进入同一页面。
我对 URL 的任何其他部分区分大小写感到满意(我知道这是标准),但我认为没有必要强制用户在 URL 中获取正确的用户名大小写。
这可以通过单独在 routes.rb 文件中添加某些设置来完成吗?
我认为这很简单,但显然不是。
我相信这不是路由问题,您可以在控制器代码中解决它:
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 ])
在控制器中处理这种行为应该可以正常工作,而不是在路由中。
# 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。