在IF条件下将两个字符串变成Ruby

时间:2019-05-29 10:29:40

标签: ruby-on-rails ruby

在我的rails项目中,我有if条带有字符串条件的语句,该语句不起作用。

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

当我与company_role = founder遇见案件时,并没有将我返回“ Other”,而是customer_kind

5 个答案:

答案 0 :(得分:2)

前提有点差。 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 :(得分:1)

尝试这样

if ['CEO','founder'].include?(shop.details['company_role'])
  'Other'
else
  shop.details['customer_kind']
end

答案 2 :(得分:1)

%w(CEO founder).include?(shop.details['company_role']) ? 'Other' : shop.details['customer_kind']

答案 3 :(得分:1)

if shop.details['company_role'].in?('CEO','founder')
  'Other'
else
  shop.details['customer_kind']
end

答案 4 :(得分:0)

保持简单-

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