Мы можем написать следующий метод:
def extract(schedule)
siteId, appointmentId =
schedule["eventData"]&.values_at("siteId", "appointmentId")
end
Если schedule
не имеет ключа, "eventData"
, sideId
и appointentId
обоим присваиваются значения nil
. Если у schedule
есть ключ "eventData"
, я предположил, что schedule["eventData"]
- это хеш, а:
siteId = schedule["eventData"]["siteId"]
appointmentId = schedule["eventData"]["appointmentId"]
&
- это безопасный оператор навигации , который сделал егодебют в Ruby v2.3. См. Также Hash # values_at .
Этот метод используется следующим образом.
def doit(schedule)
siteId, appointmentId = extract(schedule)
if siteId && appointmentId
# do something
else
# do something else
end
end
Вот несколько примеров значений, возвращаемых extract
:
schedule = { "eventData"=>{ "siteId"=>232, "appointmentId"=>48761 } }
siteId, appointmentId = extract(schedule)
#=> [232, 48761]
siteId
#=> 232
appointmentId
#=> 48761
schedule = { "eventData" => { "siteId" => 232 } }
siteId, appointmentId = extract(schedule)
#=> [232, nil]
schedule = { "eventData" => {} }
siteId, appointmentId = extract(schedule)
#=> [nil, nil]