使用重定向和多次

时间:2013-01-23 12:25:42

标签: ruby-on-rails ruby ruby-on-rails-3 sorcery

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

类UsersController< ApplicationController中

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

4 个答案:

答案 0 :(得分:1)

您的代码没有按预期执行,因为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

我重新安排了代码,但它应该在逻辑上做你想要的。我先把“快乐路径”({{1}}存在),然后将重定向移到else语句中。

答案 1 :(得分:0)

常规用户身份验证:

 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

答案 2 :(得分:0)

尝试:

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

答案 3 :(得分:0)

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