ruby on rails - How do I generate a normal looking URL for a delete User with Devise, rather than a URL with a format? -
on settings page of user account, want add cancel button. issue keep having normal things keep creating url has .format
.
this in view:
<%= link_to "cancel account", cancel_user_account_path(resource), data: { confirm: "are sure want cancel account? of memories lost!" }, method: :delete, class: "btn left" %>
routes
delete "cancel", to: "users#destroy", as: :cancel_user_account
which generates in rake routes
:
cancel_user_account_path delete /cancel(.:format) users#destroy
this user#destroy
looks like:
def destroy @user = user.find(params[:id]) if @user.destroy redirect_to root_path, notice: "you have cancelled account." else redirect_to :back end end
that's normal.
but keeps generating url: http://localhost:3000/cancel.148
which generates error when clicked:
started delete "/cancel.148" 127.0.0.1 @ 2016-01-21 00:30:02 -0500 processing userscontroller#destroy user load (1.3ms) select "users".* "users" "users"."id" = 148 order "users"."id" asc limit 1 familytree load (1.0ms) select "family_trees".* "family_trees" "family_trees"."user_id" = 148 limit 1 node load (1.6ms) select "nodes".* "nodes" "nodes"."family_tree_id" in (150) role load (0.8ms) select "roles".* "roles" inner join "users_roles" on "roles"."id" = "users_roles"."role_id" "users_roles"."user_id" = $1 , (((roles.name = 'admin') , (roles.resource_type null) , (roles.resource_id null))) [["user_id", 148]] completed 404 not found in 23ms (activerecord: 4.6ms) activerecord::recordnotfound - couldn't find user without id:
in error page, can check params...and sending request:
request parameters {"_method"=>"delete", "action"=>"destroy", "controller"=>"users", "format"=>"148"}
i have no idea how generate /cancel/148
.
i tried many permutations of routes, including putting within devise_for :user
block so:
devise_scope :user "settings", to: "devise/registrations#edit" delete "logout", to: "devise/sessions#destroy" delete "cancel", to: "users#destroy", as: :cancel_user_account end
i tried using other route devise seems have generated:
edit_user_registration_path /users/edit(.:format) registrations#edit patch /users(.:format) registrations#update put /users(.:format) registrations#update delete /users(.:format) registrations#destroy
but still generates weird path: http://localhost:3000/users/edit.148
, generates similar error:
activerecord::recordnotfound @ /users/edit.148 couldn't find user 'id'=edit
these params:
request parameters {"_method"=>"delete", "action"=>"destroy", "controller"=>"users", "id"=>"edit", "format"=>"148"}
what doing wrong?
the defined route not correct.
it be:
delete "/users/:id/cancel", to: "users#destroy", as: :cancel_user_account
actually, shorter enough (ensure doesn't conflict other routes)
delete "/users/:id", to: "users#destroy", as: :cancel_user_account
Comments
Post a Comment