在我的rails项目中,我有if
条带有字符串条件的语句,该语句不起作用。
if shop.details['company_role'] == 'CEO' || 'founder'
'Other'
else
shop.details['customer_kind']
end
end
当我与company_role = founder
遇见案件时,并没有将我返回“ Other”,而是customer_kind
答案 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