我正试图找出case
语句考虑从正则表达式传入的两个参数的方法。
我的正则表达式示例是:
当(/^(?:a|an|the) (RoleA|RoleB)
尝试访问(New|Updated) Record$/)
时|role_type, record_type|
。
我有一个case
语句,目前只考虑角色类型,但我如何拥有role_type
和record_type
的案例部分帐户?
我的目标是测试当记录类型为“新建”或“更新”时,角色A定向到一组不同的端点,并且我希望在传入“新建”时将角色B定向到另一组端点和“更新”。如果它们被传递到相同的端点,那么record_type
的case语句就足够了。
我现在拥有的是:
case record_type
when 'New'
<do something>
when 'Updated'
<do something>
end
我想根据角色来切换行为。这不起作用:
case record_type && role_type == 'RoleA'
when 'New'
<do something>
when 'Updated'
<do something>
end
case record_type && role_type == 'RoleB'
when 'New'
<do something>
when 'Updated'
<do something>
end
这段代码被跳过,我假设Ruby对使用哪个语句感到困惑。
答案 0 :(得分:2)
你不能通过&#34;论证&#34;到case
。 case
之后的第一个术语是一个表达式,它返回它将匹配的对象,并且您放入的表达式将返回true
或false
。您可以将它全部放在if
表达式中,也可以将两个对象放在一个数组中并匹配整个数组:
case [record_type, role_type]
when ['New', 'RoleA']
...
when ['New', 'RoleB']
...
when ['Updated', 'RoleA']
...
when ['Updated', 'RoleB']
...
end
答案 1 :(得分:1)
Ruby不会“困惑”你只有2个案例:
db.stores.update(
{_id:id }, //set accounts Id which you want to update
{$pull:{
"associatedAccounts":{
"_id"accountsId // the unique _id from the objects in arrray
}
}
})
因为$pull
只会评估为真或假我认为你想要的更多是:
case record_type && role_type == 'RoleA' # true or false
话虽这么说我会建议调查是否可以将这种重构变成像
这样简单的东西record_type && role_type == 'RoleA'
如果我理解case role_type
when 'RoleA'
case record_type
when 'New'
#do something
when 'Updated'
#do something
end
when 'RoleB'
case record_type
when 'New'
#do something
when 'Updated'
#do something
end
end