我正在尝试做以下工作:
1)如果我是用户,我会在删除帐户时退出。
2)如果我是管理员,我会在删除其他用户的帐户时保持登录状态。
当我将current_user方法设置为
时,它可以正常工作 def current_user
@current ||= User.find(session[:user_id]) if session[:user_id]
end
但是当我将其设置为
时 def current_user
User.find(session[:user_id]) if session[:user_id]
end
它给了我这个错误
ActiveRecord::RecordNotFound in UsersController#destroy
Couldn't find User with 'id'=30
我不明白为什么" @current || ="让它发挥作用。
application_controller.rb
def require_signin
unless current_user
session[:intended_url] = request.url
redirect_to signin_path, notice: "This page requires signin"
end
end
def require_admin
unless current_user_admin?
redirect_to root_path, notice: "Unauthorized Access"
end
end
def current_user_admin?
current_user && current_user.admin?
end
def current_user
@current ||= User.find(session[:user_id]) if session[:user_id]
end
def current_user?(user)
user == current_user
end
user_controller.rb
def destroy
@user = User.find(params[:id])
unless current_user?(@user) || current_user_admin?
redirect_to root_path, alert: "Unauthorized Access"
end
@user.destroy
session[:user_id] = nil unless current_user_admin?
redirect_to players_path, alert: "'#{@user.name}' was deleted"
end
答案 0 :(得分:1)
||=
运算符表示"设置此变量(如果尚未设置")。
当您删除当前登录的帐户时,您会从数据库中删除User
,但session[:user_id]
仍设置为现已删除的User
&#39 ; s。ID。
尝试使用已删除的用户ID调用User#find
将导致ActiveRecord
错误。
当||=
运算符出现时, not 发生这种情况的原因是因为@current
变量已经已设置因此{{ 1}}永远不会被调用。
User#find