首页 > 解决方案 > Rails:如何检查用户是否存在于控制器中,如果不重定向到其他站点

问题描述

我想检查用户控制器的显示操作中是否存在用户。如果用户不存在,当前用户应该被重定向到他的个人资料页面(通过显示操作)。问题是它一次又一次地被重定向,直到浏览器停止它。

如果我不使用respond_to |format|(所以没有重定向)并且只使用 set_user 作为浏览器中显示的路径的等效User.find(params[:id])路径是错误的路径,但它显示了当前用户。

 UserController:

  def show
    respond_to do |format|
      if User.exists?(:id)
        @user = User.find(params[:id])
        format.html
      else
        set_user
        format.html {redirect_to @user, notice: 'User does not exist' }
      end
    end
  end

  private

  def set_user
    @user = current_user
  end

因此,如果用户不存在,我希望在浏览器中显示正确的路径和当前用户。要么存在显示正确用户的错误路径,要么存在无限循环的重定向。

标签: ruby-on-rails

解决方案


可能是错误的逻辑是正确的,

def show
respond_to do |format|
  if User.exists?(params[:id])
    @user = User.find(params[:id])
    format.html
  else
    set_user
    format.html {redirect_to @user, notice: 'User does not exist' }
  end
end
end

推荐阅读