问题描述
问题描述现在在一个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 elserender :json => {:status => 'error', :msg => 'question already exists in this bucket'} endendrender :json => {:status => 'ok'}
我现在的话就是在这一系列的更新操作中,假如有一次更新操作出错失败了,就直接返回error给前台了,之后的更新操作也不执行,想问下,如果我想即使有一些出错了,后面的更新操作也还照样执行,但是最后也能返回给前端页面是那几个id对应的条目的更新操作出错失败了,请问各位大大有优雅的解决方案吗?
问题解答
回答1:给render做个ajax封装- response.error(msg)- response.success()- response.warn()省去json对象,调用 return response.error(msg)这样做可以拆开部分if else 嵌套, 对ruby语法不熟悉,仅想法,你意下如何 ?
回答2:可以用一个array记录每个qid的更新结果,比如res = [{:qid => 1, :status => 'success'}, {:qid => 2, :status => 'success'}, {:qid => 3, :status => 'fail'}, {:qid => 4, :status => 'success'}],把这个res以json的格式render回前台,这样前台就知道每个qid是否更新成功了
回答3:用 begin/end,rescue,rasie,ensure 来捕获以及处理异常捕获到异常后 记录下当前失败的 id 条目 然后继续下一次循环
最后把记录下来的失败 id 返回给前台就可以了
具体的语法相信你通过这几个关键字可以搜到的