铁轨红宝石双管会议

时间:2016-11-02 01:54:03

标签: ruby-on-rails ruby session

我正在尝试做以下工作:

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

1 个答案:

答案 0 :(得分:1)

||=运算符表示"设置此变量(如果尚未设置")。

当您删除当前登录的帐户时,您会从数据库中删除User,但session[:user_id]仍设置为现已删除的User&#39 ; s。ID。

尝试使用已删除的用户ID调用User#find将导致ActiveRecord错误。

||=运算符出现时, not 发生这种情况的原因是因为@current变量已经已设置因此{{ 1}}永远不会被调用。

User#find