Согласно Devise docs метод after_sign_in_path_for принимает фактический объект Client, но вы сравниваете входные данные с набором строк, которые все возвращают false, поэтому ваше большое предложение if вернет nil , Не уверен, для чего предназначен Devise, когда это происходит, но поиск client_url был бы разумным значением по умолчанию.
Попробуйте вместо этого:
def after_sign_in_path_for(resource)
case resource
when Client then "/client_accounts/" + current_client.id.to_s
when Admin then stored_location_for(:admins) || "/admin/control_panel"
when Owner then stored_location_for(:owners) || "/client_accounts"
end
end
Если это не поможет, я бы поставил оператор отладчика в верхней части метода, чтобы убедиться, что ваши помощники, такие как 'current_client', работают так, как вы ожидаете (и чтобы убедиться, что after_sign_in_path_for вызывается вообще) .