Руби две строки в условии IF - PullRequest
0 голосов
/ 29 мая 2019

В моем проекте rails у меня есть if оператор со строковыми условиями, который не работает.

  if shop.details['company_role'] == 'CEO' || 'founder'
        'Other'
      else
        shop.details['customer_kind']
      end
  end

Когда у меня есть случай с company_role = founder, он не возвращает мне «Другое», но customer_kind

Ответы [ 5 ]

2 голосов
/ 29 мая 2019

Предпосылка немного не в порядке.Оператор 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
1 голос
/ 29 мая 2019
%w(CEO founder).include?(shop.details['company_role']) ? 'Other' : shop.details['customer_kind']
1 голос
/ 29 мая 2019
if shop.details['company_role'].in?('CEO','founder')
  'Other'
else
  shop.details['customer_kind']
end
1 голос
/ 29 мая 2019

Попробуй вот так,

if ['CEO','founder'].include?(shop.details['company_role'])
  'Other'
else
  shop.details['customer_kind']
end
0 голосов
/ 29 мая 2019

Сохраняйте это простым -

if shop.details['company_role'] == 'CEO' || shop.details['company_role'] == 'founder'
        'Other'
else
        shop.details['customer_kind']
end
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...