我第一次使用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
我很确定我在路线上做错了什么,但我看不清楚。任何建议表示赞赏!
答案 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;相反,您将其称为destroy
(method: :destroy
)。
为了给出上下文,HTTP协议填充了一系列verbs,以帮助您定义不同的&#34;动作&#34;对于特定资源(url)。这是维基百科的解释:
HTTP
定义方法(有时称为动词),以指示要对已识别资源执行的所需操作。此资源表示的是,预先存在的数据还是动态生成的数据,取决于服务器的实现。
因此,当您在routes of your app中使用resources
帮助时,您将看到生成了哪些路由:
如上所示,每次声明特定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