首页 > 解决方案 > 在Rails中的URL中为用户名添加符号前缀

问题描述

我正在我的应用程序中实现用户名系统,并且我正在尝试使 URL 更漂亮。我宁愿没有类似的东西:

myapp.com/users/joebloggs

myapp.com/u/joebloggs

反而

myapp.com/joebloggs

如果我想要漂亮的版本,我将不得不将一大堆路径列入白名单,我宁愿不这样做。我注意到 Medium.com 和 producthunt.com 做了以下事情来解决这个问题:

myapp.com/@joebloggs

如何在 @ 符号作为用户名前缀的 Rails 6 应用程序中创建相同的应用程序?很确定我必须命名路由,但不确定如何准确实现它。我认为像下面这样的东西可能会起作用,但事实并非如此。

namespace :user, path: "@:username" do
  resources :posts
end

标签: ruby-on-railsruby

解决方案


只需在路由前面加上@符号,然后在其后面加上您要捕获的变量名称,例如:

# config/routes.rb
get '@:user_id' => 'users#show'

然后在您的控制器中,只需像这样引用变量名称:

# app/controllers/users_controller.rb
class UsersController < ApplicationController
  def show
    render json: { user_id: params[:user_id] }.to_json
  end
end

这就是你会得到的:

// http://localhost:3000/@joe

{
  "user_id": "joe"
}

编辑:如果您想为特定页面设置范围,@user您也可以使用相同的技术:

  # config/routes.rb

  scope '@:user_id' do
    get 'scoped', to: 'users#scoped'
  end
http://localhost:3000/@joe/scoped

推荐阅读