Как сказал Эндрю, вам нужно иметь эту логику в вашей пользовательской модели. Я сделаю еще один шаг и сделаю каждое условие методом, обеспечивающим чистоту, понятность, возможность повторного использования кода и соблюдение принципа единой ответственности. А также определите метод в пользовательской модели, который возвращает состояние, например, так.
class User
def get_state(request)
return 'state1' if no_company_and_subdomain?(request)
return 'state2' if has_company_that_match_subdomain?(request)
return 'state3' if admin_has_company_that_match_subdomain?(request)
end
def no_company_and_subdomain?(request)
company.nil? && request.subdomains.empty?
end
def has_company_that_match_subdomain?(request)
return false if company.nil? || is_admin
company.downcase == request.subdomains.first.downcase
end
def admin_has_company_that_match_subdomain?(request)
return false if company.nil? || !is_admin
company.downcase == request.subdomains.first.downcase
end
end
и тогда ваш код контроллера станет таким
if !session[:user_id].nil?
@user = User.find(session[:user_id])
@user.get_state
end
Очевидно, вы можете более разумно переименовать методы в соответствии с вашими требованиями.