我正在基于Rails开发一个REST API。要使用此API,您必须先登录。因此,我想在用户控制器中创建一个名为me
的方法,以返回已登录用户信息的JSON格式数据。
所以,我不需要在URL中传递:id
。我只需要调用http://example.com/api/users/me
。
于是我尝试了这个:
namespace :api, defaults: { format: 'json' } do
scope module: :v1, constraints: ApiConstraints.new(version: 1, default: true) do
resources :tokens, :only => [:create, :destroy]
resources :users, :only => [:index, :update] do
# I tried this
match 'me', :via => :get
# => api_user_me GET /api/users/:user_id/me(.:format) api/v1/users#me {:format=>"json"}
# Then I tried this
member do
get 'me'
end
# => me_api_user GET /api/users/:id/me(.:format) api/v1/users#me {:format=>"json"}
end
end
end
正如您所看到的,我的路由等待一个id,但我希望得到像devise一样的东西。基于current_user
id。以下是示例:
如上所述,我的路由需要等待一个ID参数,但我希望能够像Devise一样使用基于当前用户ID的方法。下面是一个示例:
edit_user_password GET /users/password/edit(.:format) devise/passwords#edit
在这个例子中,您可以编辑当前用户的密码而不需要将ID作为参数传递。
我可以使用集合而不是成员,但那是一个肮脏的绕过方式。
get 'users/me' => 'users#me'
可以正常工作,但将它们作为单数资源组合是更清晰的方法。 - Orlandoresource
或者复数的resources
,而不是混合使用,否则只有第一个出现的会被路由到。 - weshouman