ruby-on-rails - 在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
解决方案
只需在路由前面加上@
符号,然后在其后面加上您要捕获的变量名称,例如:
# 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