有人可以帮助我。使用下面的条件语句,只满足第一个和第二个条件,第三个(第二个elsif语句)和最后一个条件永远不会满足。我试过移动用例语句,但我得到了相同的结果。
def current_user
if Stylist.exists?(session[:user_id]) && Stylist.find(session[:user_id]).has_role?(:def_stylist)
@current_user = Stylist.find(session[:user_id])
elsif Client.exists?(session[:user_id]) && Client.find(session[:user_id]).has_role?(:def_client)
@current_user = Client.find(session[:user_id])
elsif Admin.exists?(session[:user_id]) && Admin.find(session[:user_id]).has_role?(:def_admin)
@current_user = Admin.find(session[:user_id])
else
@current_user = nil
end
end
答案 0 :(得分:1)
只有当我们找不到造型师,客户或管理员时,才会满足最后条件。
我的问题是编码问题,假设您的管理员用户ID是1而且1是客户端ID以及具有def_client角色的客户端ID,
因此,当管理员登录时,我们检查id {1}是否存在于Client
表中并找到客户端。您应该为不同的角色设置diffent会话。
我认为在更改会话密钥后,这将有效。
def current_user
@current_user =
if session[:stylist_user_id] && Stylist.find(session[:stylist_user_id]).has_role?(:def_stylist)
Stylist.find(session[:stylist_user_id])
elsif Client.exists?(session[:client_user_id]) && Client.find(session[:client_user_id]).has_role?(:def_client)
Client.find(session[:client_user_id])
elsif Admin.exists?(session[:admin_user_id]) && Admin.find(session[:admin_user_id]).has_role?(:def_admin)
Admin.find(session[:admin_user_id])
end
end
更新:您可以通过更改代码来进一步减少查询。请记住,存在触发查询,然后检查角色,再次在造型师,客户端或管理员上创建查询,然后我们找到可以通过将代码更改为下面的代码来减少查询。
def current_user
@current_user =
if session[:stylist_user_id]
stylist = Stylist.find(session[:stylist_user_id])
stylist if stylist.has_role?(:def_stylist)
elsif session[:client_user_id]
client = Client.find(session[:client_user_id])
client if client.has_role?(:def_client)
elsif session[:admin_user_id]
admin = Admin.find(session[:admin_user_id])
admin if admin.has_role?(:def_admin)
end
end