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