Ruby:为什么第三个条件语句不会成立?

时间:2018-06-13 06:21:01

标签: ruby if-statement ruby-on-rails-4 conditional

有人可以帮助我。使用下面的条件语句,只满足第一个和第二个条件,第三个(第二个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

1 个答案:

答案 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