Rails&设计:用户帐户不删除

时间:2015-10-24 06:54:35

标签: ruby-on-rails devise

我第一次使用Devise gem来验证用户身份。我可以毫无问题地注册,注销,登录和编辑用户帐户,但删除帐户无效!当我单击按钮删除时,弹出JS确认询问我是否要删除,我单击是...然后我被重定向到用户的显示页面。用户帐户完好无损。

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

我在Rails路由方面仍然不稳定,但在我的routes.rb中我有:

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

以及:

resources :users

当我运行rake路线时,我认为可能与之相关的两条路线是:

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

我很确定我在路线上做错了什么,但我看不清楚。任何建议表示赞赏!

2 个答案:

答案 0 :(得分:3)

#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,以帮助您定义不同的&#34;动作&#34;对于特定资源(url)。这是维基百科的解释:

  

HTTP定义方法(有时称为动词),以指示要对已识别资源执行的所需操作。此资源表示的是,预先存在的数据还是动态生成的数据,取决于服务器的实现。

因此,当您在routes of your app中使用resources帮助时,您将看到生成了哪些路由

enter image description here

如上所示,每次声明特定resource的路由时,Rails会自动填充多个预定义的URL /路径。为了让您的应用正确处理您的请求,您必须将其发送到请求的网址 - 并且必须有效。

答案 1 :(得分:1)

更改

<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: :delete而不是method: :destroy