Предпосылка немного не в порядке.Оператор if
работает , но не дает ожидаемых результатов.По сути, это эквивалентно этому:
shop.details ['company_role'] == 'CEO' # это правда?тогда остановись |"основатель" # это правда?да, это всегда правдиво
Все предоставленные решения будут работать.Ваш выбор в основном зависит от вашего стиля кода.Я бы выбрал второй вариант, потому что лично мне нравится тест с акцентом на проверенные данные.
Два дальнейших предложения.Во-первых, сам тест может быть извлечен в метод.Это улучшит читабельность вашего кода.
def shop_type
if executive?
'Other'
else
shop.details['customer_kind']
end
# alternate: executive? ? 'Other' : shop.details['customer_kind']
end
def executive?
shop.details['company_role'].in?('CEO','founder')
end
Наконец, мне кажется, что решение о том, включает или нет Shop
"руководителя"?кажется, полезная информация в ряде контекстов.Таким образом, похоже, что метод executive?
лучше поместить в модель Shop
, чтобы знание внутренней организации Shop
не распространялось по всей вашей системе.
shop.executive? ? 'Other' : shop.details['customer_kind']
class Shop
...
def executive?
shop.details['company_role'].in?('CEO','founder')
end
end