前提・実現したいこと
現在devise-token-authで認証行うユーザーに、プロフィール画像を登録できる機能を実装しようとしています。Railsのactive storage を使用したいと考えているのですが、いろいろ試行錯誤するうちに、deviseで自動設定されるルーティングのほかに以下のルートを追加したい状況になりました。(formDataを送信するにはpost送信が必要。devise-token-authのユーザ編集はput、またはpatch)
POST /api/user/update(.:format) api/user/registrations#update
そして以下が現在のroutes.rbファイルです
routes
1namespace :api do 2 resources :users 3 mount_devise_token_auth_for 'User', at: 'user', controllers: { 4 registrations: 'api/user/registrations' 5 } 6 devise_scope :user do 7 post 'user/update', to: 'user/registrations#update' 8 end 9 end
そして以下が生成されるルーティングです
//略 GET /api/user/sign_up(.:format) api/user/registrations#new GET /api/user/edit(.:format) api/user/registrations#edit PATCH /api/user(.:format) api/user/registrations#update PUT /api/user(.:format) api/user/registrations#update DELETE /api/user(.:format) api/user/registrations#destroy POST /api/user(.:format) api/user/registrations#create GET /api/user/validate_token(.:format) devise_token_auth/token_validations#validate_token POST /api/user/update(.:format) api/user/registrations#update //略
思った通りのルーティングが生成されています。
発生している問題・エラーメッセージ
しかし以下のエラーになり先に進めない状況になってしまっています。
Could not find devise mapping for path "/api/user/update". This may happen for two reasons: 1) You forgot to wrap your route inside the scope block. For example: devise_scope :user do get "/some/route" => "some_devise_controller" end 2) You are testing a Devise controller bypassing the router. If so, you can explicitly tell Devise which mapping to use: @request.env["devise.mapping"] = Devise.mappings[:user]
試したこと
スコープでラップしろと書かれていますが、ラップしている気がします。
このエラーへの対処方法、そもそもルートを増やす方法が間違えているなどありましたら、ご教授よろしくお願いします。
あなたの回答
tips
プレビュー