Amr*_*man 4 api routes ruby-on-rails
所以我users
在我的路线中定义了一个简单的资源。
resources :users
Run Code Online (Sandbox Code Playgroud)
我需要提供一条路线,以便登录的用户可以在前端获取他的信息。我想过这样做:
resources :users do
get 'current' , on: :collection
end
Run Code Online (Sandbox Code Playgroud)
但这在语义上意味着该路由给出当前用户的列表,而不是当前用户。事实上,如果我这样做rake routes
,它会将路径前缀显示为:current_users
我可以通过执行以下操作来解决路径前缀:
get '/users/current' => 'users#current', as: 'current_user'
Run Code Online (Sandbox Code Playgroud)
但这看起来仍然提供了用户列表。所以,我想知道是否有一种“正确的方法”来做这种事情以及如何在 Rails 中做到这一点?还是我想太多了,我拥有的一切都很好?
如果有一个“正确的方法”
“正确”的方法是使用单一资源:
#config/routes.rb
resource :user #-> url.com/user -> users#show
Run Code Online (Sandbox Code Playgroud)
当然,“正确”的方式就意味着有“错误”的方式,但事实并非如此。
编程是为数不多的可以做任何你想做的事的实践之一,只要能达到结果。当然,你如何实现这一结果可能会受到批评;最终,有无数种方法可以实现这一目标......
#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
Run Code Online (Sandbox Code Playgroud)
上面(你的代码)的作用与我的代码的作用相同,只是以不同的方式。
仅仅因为您使用的是集合路由,并不意味着您需要传递集合。“集合”路由主要针对Rails路由结构;这些路线对您的后端代码没有影响。
--
这也意味着您应该愿意尝试使用选项/开关来自定义您的路由:
#config/routes.rb
resource :user, path: "current_user", as: :current_user #-> url.com/current_user -> users#show
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
2116 次 |
最近记录: |