Ruby on rails 如何在RESTAPI中为当前用户提供路由?

Ruby on rails 如何在RESTAPI中为当前用户提供路由?,ruby-on-rails,api,routing,Ruby On Rails,Api,Routing,因此,我在路由中定义了一个简单的用户资源 resources :users 我需要提供一个路由,以便登录用户可以在前端获取他的信息。我考虑过这样做: resources :users do get 'current' , on: :collection end 但这在语义上意味着路由给出了当前用户的列表,而不是当前用户的列表。事实上,如果我做了rake routes,它会将路径前缀显示为:current\u users 我可以通过如下操作绕过路径前缀: get '/users/curre

因此,我在路由中定义了一个简单的
用户
资源

resources :users
我需要提供一个路由,以便登录用户可以在前端获取他的信息。我考虑过这样做:

resources :users do
  get 'current' , on: :collection
end
但这在语义上意味着路由给出了当前用户的列表,而不是当前用户的列表。事实上,如果我做了
rake routes
,它会将路径前缀显示为:
current\u users

我可以通过如下操作绕过路径前缀:

get '/users/current' => 'users#current', as: 'current_user'
但这看起来还是提供了一个用户列表。所以,我想知道是否有一种“正确的方法”来做这类事情,以及如何在rails中做到这一点?还是我想得太多了,我所拥有的一切都很好

2.5单一资源有时候,客户端总是在不引用ID的情况下查找资源 /profile始终显示当前登录用户的配置文件。 在这种情况下,您可以使用单一资源来映射/分析(而不是 而不是/profile/:id)来显示操作:

也许你是认真的?

如前所述,单一资源是您所寻找的。或者这个:

get 'user/current' => 'users#current', as :current_user
我所做的一件事是在参考资料语句中使用单数形式,因为操作涉及单个用户(例如/usr/573以显示用户573的信息),然后为所有用户的列表添加了一个额外的匹配项:

match 'users' => 'user#index', as :user_list, via: [ :get, :post ]
get 'user/current' => 'user#current', as :current_user
resources :user, except: :index
不完全是RESTful,但它使URL准确地反映了我是在处理用户集还是在处理单个用户。用户列表的:post用于提交搜索框

如果有一条“正确的道路”

“正确”的方法是使用:


当然,“正确”的方式意味着存在“错误”的方式,事实并非如此

编程是为数不多的几种实践之一,在这些实践中,您可以做任何您想做的事情,只要实现了结果。当然,你如何达到这个结果可能会受到批评;最终,有无数的方法来实现它

#config/routes.rb
resources :users do
  get :current, on: :collection #-> url.com/users/current -> users#current
end

#app/controllers/users_controller.rb
class UsersController < ApplicationController
   def current
      @user = current_user
   end
end 

谢谢,只是一个小问题:在上一个示例中,如果不指定控制器,则默认为
用户
。因此,我必须在
show
操作(例如)中通过检查
参数[:id]
手动检测这是对
/current\u user
还是对
/users/:id
的请求。对的
#config/routes.rb
resource :user #-> url.com/user -> users#show
#config/routes.rb
resources :users do
  get :current, on: :collection #-> url.com/users/current -> users#current
end

#app/controllers/users_controller.rb
class UsersController < ApplicationController
   def current
      @user = current_user
   end
end 
#config/routes.rb
resource :user, path: "current_user", as: :current_user #-> url.com/current_user -> users#show