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

Popular posts from this blog

sql - VB.NET Operand type clash: date is incompatible with int error -

SVG stroke-linecap doesn't work for circles in Firefox? -

python - TypeError: Scalar value for argument 'color' is not numeric in openCV -