有人可以帮我吗?对于下面的条件语句,只满足第一个和第二个条件,永远不满足第三个(第二个 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
只有当我们找不到造型师、客户或管理员时,才会满足最后一个条件。我认为问题在于代码,假设您的管理员用户 ID 为 1,并且 1 是具有 def_client 角色的客户端 ID,因此当管理员登录时,我们会检查Client
表中是否存在 ID 1并找到客户端。您应该为不同的角色设置不同的会话。我认为在更改会话密钥后这会起作用。
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
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句