2014-01-27 5 views
0

Вот мой метод:Бегин Rescue с API конечной

def get_video_duration 
    @time ||= Panda.get("/videos/#{@video.panda_id}/metadata.json")["duration"] 
    format_duration 
end 

Мне нужно написать этот метод «лучше» в окружив его с begin, rescue блока, так что @time может быть ноль в зависимости от ответа от API.

+0

Вы хотите выполнить 'Panda.get' всегда, или только тогда, когда' @ time' равна нулю/ложь? –

ответ

2

Да, возможно использование inlinerescue статья.

def get_video_duration 
    @time ||= Panda.get("/videos/#{@video.panda_id}/metadata.json")["duration"] rescue nil 
    format_duration 
end 

Или лучше явно.

def get_video_duration 
    @time ||= Panda.get("/videos/#{@video.panda_id}/metadata.json")["duration"] 
rescue YourException 
    @time = nil 
    format_duration 
end 
+0

Вы разрушаете логику OP. В исходном вопросе было ленивое создание '@ time', в то время как вы его устанавливали в любом случае, несмотря на то, было ли уже установлено или нет. – mudasobwa

+0

@mudasobwa Если это то, что означает OP, я удалю это. Подождите, пока OP вернется и ответит, это не то, что он хотел. –

+0

@ArupRakshit - Спасибо за помощь! Леновый экземпляр '@ time' - это то, что я собирался для – dennismonsewicz

1

Может быть, разбить его с дополнительным методом:

def fetch_video_duration 

    Panda.get("/videos/#{@video.panda_id}/metadata.json")["duration"] 

    rescue 
    return nil 
end 

def get_video_duration 
    @time ||= fetch_video_duration 

    format_duration 
end