Devise が提供するすべての登録ルートの名前を変更しようとしていましたが、アカウント情報を更新できなくなりました。問題なく GET リクエストを介してアクションをレンダリングしregistrations#edit
ますが、PUT および DELETE リクエストはすべて何らかの方法で sign_up パスに送信されます。
これが私の現在のルートファイルです:
...
devise_for :users, path: '', path_names: { sign_in: 'login', sign_out: 'logout', sign_up: 'signup' }, controllers: { registrations: "registrations" }, skip: [:registrations]
as :user do
get '/admin/cancel' => 'registrations#cancel', as: :cancel_user_registration
post '/signup' => 'registrations#create', as: :user_registration
get '/signup' => 'registrations#new', as: :new_user_registration
get '/admin/settings/account' => 'registrations#edit', as: :edit_user_registration
put '/admin/settings/account' => 'registrations#update', as: :update_user_registration
delete '/admin/settings/account' => 'registrations#destroy', as: :destroy_user_registration
end
「/admin/settings/account」にアクセスすると、アカウントの編集ビューが期待どおりにレンダリングされるようになりました。ただし、「更新」ボタンは PUT メソッドで「/signup」を指し、「アカウントをキャンセル」リンクも「/signup」を指しますが、メソッドは DELETE です。
次に、「登録/編集」をレンダリングするためのビューを掘り下げて、これらを見つけました
<%= simple_form_for(resource, as: resource_name, url: registration_path(resource_name), html: { method: :put }) do |f| %> ...
... <%= link_to "Cancel my account", registration_path(resource_name), confirm: "Are you sure?", method: :delete %> ...
実際には、 PUTregistration_path(resource_name)
と DELETE の正しいルートの生成を担当しています。しかし、デフォルトの Devise 登録ルートを変更したため、正しいパスを認識して吐き出すことができなくなりました。
これを修正する方法を知っている人はいますか?とはどういうregistration_path(resource_name)
意味ですか?