搜尋

首頁  >  問答  >  主體

ruby - 有一串的ajax操作,其中几个可能会出错,请问怎么样才能优雅的处理

问题描述

现在在一个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_leeringa_lee2774 天前1023

全部回覆(3)我來回復

  • 高洛峰

    高洛峰2017-04-22 08:57:54

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

    回覆
    0
  • 怪我咯

    怪我咯2017-04-22 08:57:54

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

    回覆
    0
  • PHP中文网

    PHP中文网2017-04-22 08:57:54

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

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

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

    回覆
    0
  • 取消回覆