Я разрабатываю REST api на основе рельсов. Чтобы использовать этот api, вы ДОЛЖНЫ войти в систему. Что касается этого, я хотел бы создать метод me
в моем пользовательском контроллере, который вернет json из зарегистрированных данных пользователя.
Поэтому мне не нужно передавать :id
в URL-адрес. Я просто хочу назвать http://domain.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
Как вы можете видеть, мой маршрут ждет идентификатора, но я хотел бы получить что-то вроде devise. Что-то основано на current_user
id. Пример ниже:
edit_user_password GET /users/password/edit(.:format) devise/passwords#edit
В этом примере вы можете редактировать текущий пароль пользователя, не передавая id в качестве параметра.
Я мог бы использовать коллекцию вместо члена, но это грязный обход...
У кого-то есть идея? Спасибо вам