Ruby on rails RubyonRails-设置对象值
我创建了一个RubyonRails应用程序,用户可以在其中登录和注销,还可以创建新帐户。用户有一个整数“rankid”,根据他们的rankid在站点上有不同的权限 我希望用户能够通过转到Ruby on rails RubyonRails-设置对象值,ruby-on-rails,authentication,Ruby On Rails,Authentication,我创建了一个RubyonRails应用程序,用户可以在其中登录和注销,还可以创建新帐户。用户有一个整数“rankid”,根据他们的rankid在站点上有不同的权限 我希望用户能够通过转到ROOTURL/upgrade,升级到下一个排名-因此在my routes.rb中,我有以下内容: map.connect '/upgrade', :controller => 'users', :action => 'upgrade' 在“我的用户”控制器中使用以下方法: def upgrade
ROOTURL/upgrade
,升级到下一个排名-因此在my routes.rb中,我有以下内容:
map.connect '/upgrade', :controller => 'users', :action => 'upgrade'
在“我的用户”控制器中使用以下方法:
def upgrade
@CurrentID = session[:user_id]
@user = User.find(@CurrentID)
if @user.rankid = 0
@user.rankid = 1
redirect_to root_url, :notice => "Upgraded to VIP!"
return
end
if @user.rankid = 1
@user.rankid = 2
redirect_to root_url, :notice => "Upgraded to Admin!"
return
end
end
我使用设置了身份验证,但不明白为什么它不起作用。
抱歉,如果这是一个非常愚蠢的错误-我对Ruby和Rails都是新手。首先,您的
if
语句需要一个双等号,它将@user.rankid
与0
进行比较,而不是将其设置为0
if @user.rankid == 0
其次,在更新用户之后,您永远不会保存他们。最后,在第二个块上使用elsif
。否则,用户将升级为VIP,然后立即升级为管理员。通过使用else/elsif,您不需要硬编码return语句
完整代码:
def upgrade
@user = User.find(session[:user_id])
if @user.rankid == 0
@user.update_attributes(:rankid => 1)
redirect_to root_url, :notice => "Upgraded to VIP!")
elsif @user.rankid == 1
@user.update_attributes(:rankid => 2)
redirect_to root_url, :notice => "Upgraded to Admin!"
end
end
首先,您的
if
语句需要一个双等号,它将@user.rankid
与0
进行比较,而不是将其设置为0
if @user.rankid == 0
其次,在更新用户之后,您永远不会保存他们。最后,在第二个块上使用elsif
。否则,用户将升级为VIP,然后立即升级为管理员。通过使用else/elsif,您不需要硬编码return语句
完整代码:
def upgrade
@user = User.find(session[:user_id])
if @user.rankid == 0
@user.update_attributes(:rankid => 1)
redirect_to root_url, :notice => "Upgraded to VIP!")
elsif @user.rankid == 1
@user.update_attributes(:rankid => 2)
redirect_to root_url, :notice => "Upgraded to Admin!"
end
end
您是否在用户点击用户升级操作(即登录)之前设置会话[:user_id] 您也可以跳过额外的变量,只使用
@user = User.find(session[:user_id])
但是在你使用结果之前,确保你得到了有用的东西
if @user
@user.rankid += 1;
@user.save # Maybe even error check this
case @user.rankid
when 1
notice = "Upgraded to VIP!"
when 2
notice = "Upgraded to Admin!"
else
notice = "r00t!"
end
redirect_to root_url, :notice => notice
return
else
# some problem with your user or missing session[:user_id]
end
您是否在用户点击用户升级操作(即登录)之前设置会话[:user_id] 您也可以跳过额外的变量,只使用
@user = User.find(session[:user_id])
但是在你使用结果之前,确保你得到了有用的东西
if @user
@user.rankid += 1;
@user.save # Maybe even error check this
case @user.rankid
when 1
notice = "Upgraded to VIP!"
when 2
notice = "Upgraded to Admin!"
else
notice = "r00t!"
end
redirect_to root_url, :notice => notice
return
else
# some problem with your user or missing session[:user_id]
end
没有愚蠢的错误。只是学习,没有愚蠢的错误。只是学习。啊,好的,谢谢!出于某种原因,我认为“=”是Ruby中的比较运算符(在if语句中使用时它改变了操作)。啊,好的,谢谢!出于某种原因,我认为“=”是Ruby中的比较运算符(在if语句中使用时它改变了操作)。