ruby - 有一串的ajax操作,其中幾個可能會出錯,請問怎麼樣才能優雅的處理
ringa_lee
ringa_lee 2017-04-22 08:55:54
0
3
1044

問題描述

現在在一個rails項目中我是想在頁麵中選中一係列的條目,然後利用ajax向後端傳遞這一係列條目的id,然後在數據庫中更新這些條目中的一些字段內容

下麵是我現在的實現代碼

@qids = params[:qids]
@qids.each do |id| 
    question = Question.find_by(:id => id, :boxname => "un-matched".to_s)
    if question.nil?
        if Question.find_by(:id => id).update(:boxname => "un-matched".to_s)
        else
            render :json => {:status => "error", :msg => "database error cannot move question to target bucket"}
        end
    else
        render :json => {:status => "error", :msg => "question already exists in this bucket"}
    end
end
render :json => {:status => "ok"}

我現在的話就是在這一係列的更新操作中,假如有一次更新操作出錯失敗了,就直接返回error給前台了,之後的更新操作也不執行,想問下,如果我想即使有一些出錯了,後麵的更新操作也還照樣執行,但是最後也能返回給前端頁麵是那幾個id對應的條目的更新操作出錯失敗了,請問各位大大有優雅的解決方案嗎?

ringa_lee
ringa_lee

ringa_lee

全部回覆(3)
小葫芦

給render做個ajax封裝
- response.error(msg)
- response.success()
- response.warn()
省去json物件,呼叫 return response.error(msg)
這樣做可以拆開部分if else 嵌套, 對ruby語法不熟悉,僅想法,你意下如何 ?

刘奇

可以用一個array記錄每個qid的更新結果,比如res = [{:qid => 1, :status => "success"}, {:qid => 2, :status => "success"}, {:qid => 3, :status => "fail"}, {:qid => 4, :status => "success"}],把這個res以json的格式render回前台,這樣前台就知道每個qid是否更新成功了

Ty80

用 begin/end,rescue,rasie,ensure 來捕獲以及處理異常
捕獲到異常後 記錄下當前失敗的 id 條目 然後繼續下一次循環

最後把記錄下來的失敗 id 回傳給前台就可以了

具體的語法相信你透過這幾個關鍵字可以搜尋的

熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板