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;相反,你称它为destroy
(method: :destroy
)。
为了给出上下文,HTTP协议由一系列verbs填充,以帮助您为特定资源(url)定义不同的“操作”。这里的Wikipedia的解释:
HTTP
定义了方法(有时也被称为动词),以指示所希望的动作来识别的资源上执行。此资源代表的是预先存在的数据还是动态生成的数据,取决于服务器的实现。
因此,当您在routes of your app使用resources
帮手,你会看到这路线产生:
正如上面可以看出,每次的声明路线时间特别是resource
,Rails自动填充了几个预定义的URL /路径。为了让您的应用正确处理您的请求,您必须将其发送到所请求的网址 - 并且该网址必须有效。
变化
<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
谢谢!我把我的动词和动作搞混了! –
谢谢!这工作。把我的动词和动作搞混了! –