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