我的设计宝石有问题。当我向用户注销时,设计将我的用户从我的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
答案 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 会破坏您的会话。这样,每当有人点击退出链接时,您就会摧毁用户。