-1

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

类用户控制器 < 应用控制器

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

4 回答 4

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存在),然后将重定向移动到 else 语句中。

于 2013-01-23T12:36:29.990 回答
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
于 2013-01-23T12:32:46.453 回答
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
于 2013-01-23T12:32:47.940 回答
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
于 2013-01-23T13:23:28.783 回答