如何编写带有参数传递到案例的条件Ruby案例语句?

时间:2017-05-24 16:41:16

标签: ruby regex case-statement

我正试图找出case语句考虑从正则表达式传入的两个参数的方法。

我的正则表达式示例是:

(/^(?:a|an|the) (RoleA|RoleB)尝试访问(New|Updated) Record$/)|role_type, record_type|

我有一个case语句,目前只考虑角色类型,但我如何拥有role_typerecord_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对使用哪个语句感到困惑。

2 个答案:

答案 0 :(得分:2)

你不能通过&#34;论证&#34;到casecase之后的第一个术语是一个表达式,它返回它将匹配的对象,并且您放入的表达式将返回truefalse。您可以将它全部放在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

之间的相似之处,这可以进行更多的重构