Rails&Devise:用户帐户没有删除

问题描述:

我第一次使用Devise gem来验证用户身份。我可以注册,注销,登录和编辑用户帐户而没有问题,但删除帐户不起作用!当我点击按钮进行删除时,JS确认弹出,询问我是否要删除,点击yes ...,然后我被重定向到用户的显示页面。用户帐户完好无损。Rails&Devise:用户帐户没有删除

views/devise/registrations/edit.html.erb

<p>Unhappy? <%= button_to "Cancel my account", '/users/#{@user.id}', data: { confirm: "Are you sure?" }, method: :destroy, class: "btn btn-danger" %></p> 

在我UsersController:

def destroy 
    @user = User.find(params[:id]) 
    @user.destroy 

    if @user.destroy 
     redirect_to root_path 
    end 
end 

我还是on Rails的路由摇摇欲坠,但在我的routes.rb我:

devise_for :users, :controllers => { registrations: 'registrations' } 

以及:

resources :users 

当我运行rake航线,两条航线,我认为可以关联是:

DELETE /users(.:format)   registrations#destroy 
DELETE /users/:id(.:format)  users#destroy 

我敢肯定,我在做什么错误的路线,但我看不到什么。任何建议表示赞赏!

#config/routes.rb 
resources :users, only: :destroy 

#view 
<%= button_to "Cancel my account", @user, method: :delete, data: { confirm: "Are you sure?" } %> 

资源

您遇到的问题是您没有拨打delete HTTP verb;相反,你称它为destroymethod: :destroy)。

为了给出上下文,HTTP协议由一系列verbs填充,以帮助您为特定资源(url)定义不同的“操作”。这里的Wikipedia的解释:

HTTP定义了方法(有时也被称为动词),以指示所希望的动作来识别的资源上执行。此资源代表的是预先存在的数据还是动态生成的数据,取决于服务器的实现。

因此,当您在routes of your app使用resources帮手,你会看到这路线产生:

enter image description here

正如上面可以看出,每次的声明路线时间特别是resource,Rails自动填充了几个预定义的URL /路径。为了让您的应用正确处理您的请求,您必须将其发送到所请求的网址 - 并且该网址必须有效。

+0

谢谢!这工作。把我的动词和动作搞混了! –

变化

<p>Unhappy? <%= button_to "Cancel my account", '/users/#{@user.id}', data: { confirm: "Are you sure?" }, method: :destroy, class: "btn btn-danger" %></p> 

<p>Unhappy? <%= button_to "Cancel my account", '/users/#{@user.id}', data: { confirm: "Are you sure?" }, method: :delete, class: "btn btn-danger" %></p> 

您应该使用method: :deletemethod: :destroy

+0

谢谢!我把我的动词和动作搞混了! –