Ruby on Rails - 使用重定向和多次



我的问题实际上相当简单,我如何创建一个创建操作来检查用户是否已登录,以及她/他是否被重定向到仪表板,而不是呈现索引页面,他们有链接和东西去注册。还有为什么下面的代码不起作用。

类 用户控制器 <应用程序控制器>

def new
  @user = User.new
end
def create
  if current_user.nil?
    redirect_to dplace_index_path
  if current_user
        @user = User.new(params[:user])
      if @user.save
          auto_login(@user)
          redirect_to dplace_index_path
  end
end
end
end
end

你的代码没有做你期望的事情,因为if语句实际上是嵌套的(你想要elsif相同的结构 - 或者看到我下面建议的修复)。以下是您的代码在格式正确后的实际外观:

def create
  if current_user.nil?
    redirect_to dplace_index_path
    if current_user
      @user = User.new(params[:user])
      if @user.save
        auto_login(@user)
        redirect_to dplace_index_path
      end
    end
  end
end

从逻辑上讲,你永远不会进入第二个if语句,因为必须current_user nil才能进入第一个语句。请尝试以下操作:

def create
  if current_user
    @user = User.new(params[:user])
    if @user.save
      auto_login(@user)
      redirect_to dplace_index_path
    end
  else
    redirect_to dplace_index_path
  end
end

我重新排列了代码,但它在逻辑上应该做你现在想要的。我把"快乐路径"放在第一位(current_user存在),并将重定向移动到 else 语句中。

常规用户身份验证:

 def create
      user = User.find_by_email(params[:email])
      if user && user.authenticate(params[:password])
        session[:user_id] = user.id
        redirect_to dashboard_url, :notice => "Logged in!"
      else
        flash.now.alert = "Invalid email or password"
        render "new"
      end
    end

尝试:

def create
  if current_user.blank? # .blank? will check both blank and nil
    # logic when user is not logged in
    redirect_to index_path
  else 
    # logic when user is logged in
    redirect_to dashboard_path
  end
end
def create
  redirect_to dplace_index_path unless current_user
  # no need to check current_user again
  @user = User.new(params[:user])
  if @user.save
    auto_login(@user)
    redirect_to dplace_index_path
  end
end

相关内容

  • 没有找到相关文章

最新更新