Rails设计注销后从数据库中删除用户

时间:2014-01-29 18:52:09

标签: ruby-on-rails devise destroy

我的设计宝石有问题。当我向用户注销时,设计将我的用户从我的mysql数据库中删除。我在昨天开始工作之前就已经认识到了这个错误。我不记得哪些注册和登录也是可能的。

用户控制器

class UsersController < ApplicationController
def show
@user = User.find(params[:id])

respond_to do |format|
  format.html # show.html.erb
  format.json { render json: @user }
end
end

def destroy
@user = User.find(params[:id2])
  @user.destroy
respond_to do |format|
    format.html { redirect_to root_url}

end
end

end

注销链路

<%= link_to  " Logout", destroy_user_session_path(:id2 => current_user.id), :class => "btn  btn-danger icon-share-alt ",:style=>"font-family: FontAwesome;font-weight: bold;color:black", :method => :delete  %> 

用户模型

class User < ActiveRecord::Base
rolify
belongs_to :ressourcen

devise :database_authenticatable, :registerable,
     :recoverable, :rememberable, :trackable, :validatable

attr_accessible :vorname, :nachname, :email, :password, :password_confirmation, :roleid,:id

validates :email, :uniqueness => true

3 个答案:

答案 0 :(得分:1)

这看起来很奇怪。如果以默认方式设置设计和路由,我无法看到这应该如何发生。做什么:

rake routes

显示destroy_user_session_path?如果你还没有覆盖devise的SessionsController,并且没有更改devise的路由,那么destroy_user_session的唯一条目应该是这样的:

destroy_user_session  DELETE  /users/sign_out(.:format)  devise/sessions#destroy

绝对不应该去你的UsersController。它应该是设计的SessionsController。

无论如何,这个退出链接对我有用:

<%= link_to "Sign out", destroy_user_session_path, :method => :delete %>

destroy_user_session_path不应该需要用户ID。它只会破坏会话中的用户,因此不需要id。

更新:

当您退出时,您返回的是哪个页面?如果您没有自己定义SessionsController并且没有覆盖after_sign_out_path(),它应该尝试返回root_path。如果您的路线中没有定义根,它将返回“/”。您可以从日志文件(例如development.log)确认单击“注销”链接时会发生什么?调用哪些操作以及何时/调用哪些SQL查询?就在您点击链接时,而不是在您稍后浏览以查看用户时。另外,routes.rb中的devise_for行是什么样的?当你只点击退出链接时,值得深入了解正在发生的事情。

据我所知,设备内部唯一可以从数据库中删除用户的是RegistrationsController.destroy(),如果向/ users(没有id)发送DELETE请求,则会调用它。它会从会话中找到当前登录的用户(这就是为什么它不需要id)并销毁它们。在标准设计视图中,看起来只能从devise / registrations / edit.html.erb中调用它,并且可能你没有这样做。

答案 1 :(得分:0)

您是否自定义/覆盖了设计会话控制器?

如果不是您的退出链接应该如下所示:

<%= link_to  " Logout", destroy_user_session_path, :class => "btn  btn-danger icon-share-alt ",:style=>"font-family: FontAwesome;font-weight: bold;color:black", :method => :delete  %> 

Devise不知道:id2 param是什么。

答案 2 :(得分:0)

尝试替换它:

destroy_user_session_path

用这个:

destroy_session_path(:user_id => current_user.id)

SessionsController 会破坏您的会话。这样,每当有人点击退出链接时,您就会摧毁用户。