Последнее условие будет выполнено только тогда, когда мы не сможем найти стилиста, клиента или администратора.Дело в том, что проблема связана с кодировками. Предположим, ваш идентификатор администратора равен 1, а 1 - также идентификатор клиента, который играет роль def_client. Поэтому при входе администратора мы проверяем наличие идентификатора 1 в таблице Client
и находимклиент.Вы должны установить разные сессии для разных ролей.Я думаю, что после изменения ключей сеанса это будет работать.
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
Обновление: вы можете еще больше сократить количество запросов, изменив свой код.Имейте в виду, что наличие запускает запрос, затем вы проверяете роли, которые снова создают запрос в Stylist, клиенте или администраторе, а затем мы получаем запрос find, который мы можем уменьшить, изменив код на что-то вроде ниже.
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