2016-11-29 58 views
0

我想呈现错误消息,如果任何条件失败。如何传递涉及失败的情况我如何允许多个错误呈现消息在rails api响应

错误消息,但它给了我AbstractController::DoubleRenderError错误

def create 
    if @current_wbp_user && params[:user_id] && params[:note_id] && params[:comment] && params[:hashtag] 
     user = User.find_by(id: params[:user_id]) 
     if user.present? 
     if user.access_code != @current_wbp_user.access_code 
      render json: {errors: "User not associated with this wbp user"}, status: :unprocessable_entity 
     end 
     note = Note.find_by(id: params[:note_id]) 
     if note.present? 
      if note.user_id != user.id 
      render json: {errors: "Invalid note for this user"}, status: :unprocessable_entity 
      end 
     else 
      render json: {errors: "Note not found"}, status: :unprocessable_entity 
     end 
     else 
     render json: {errors: "User not found"}, status: :unprocessable_entity 
     end 
     @comment = @current_wbp_user.wbp_user_comments.build(wbp_user_comments_params) 
     if @comment.save 
     render json: {success: true}, status: :ok 
     else 
     render json: {errors: "Comment could not be created"}, status: :unprocessable_entity 
     end 
    else 
     render json: {errors: "Insufficient Information"}, status: :unprocessable_entity 
    end 
    end 

回答

2

您需要添加and return的每一个渲染该块

if user.present? 
... 
end 

退出功能。例如:

render json: {errors: "User not associated with this wbp user"}, status: :unprocessable_entity and return 
+0

除最后一个。这是可选的。 –

+0

绝对正确:) – Thanh

0

无重复状态码和一些重构,你可以做一些过滤器验证以这种方式你的方法看起来瘦和良好

def create 
    sucess = false 
    if @current_wbp_user && [:user_id, :note_id, :comment, :hashtag].all? {|s| params.key? s} 
     user = User.find_by(id: params[:user_id]) 
     if user.present? 
     if user.access_code != @current_wbp_user.access_code 
      message = "User not associated with this wbp user" 
     end 
     note = Note.find_by(id: params[:note_id]) 
     if note.present? 
      if note.user_id != user.id 
      message = "Invalid note for this user" 
      end 
     else 
      message = "Note not found" 
     end 
     else 
     message = "User not found" 
     end 
     @comment = @current_wbp_user.wbp_user_comments.build(wbp_user_comments_params) 
     if @comment.save 
     sucess = true 
     else 
     message = "Comment could not be created" 
     end 
    else 
     message = "Insufficient Information" 
    end 

    if sucess 
     render json: {success: true}, status: :ok 
    else 
     render json: {errors: message}, status: :unprocessable_entity 
    end 
    end 
+0

@prem状态代码在此答案中不重复 –

+1

这种方式更清洁。 –

0
def create 
    error_msgs = Array.new 
    if @current_wbp_user && params[:user_id].present? && params[:note_id].present? 
    user = User.find_by(id: params[:user_id]) 
    if user.present? 
     if user.access_code != @current_wbp_user.access_code 
     error_msgs << "User not associated with this wbp user" 
     end 
     note = Note.find_by(id: params[:note_id]) 
     if note.present? 
     if note.user_id != user.id 
      error_msgs << "Invalid note for this user" 
     end 
     else 
     error_msgs << "Note not found" 
     end 
    else 
     error_msgs << "User not found" 
    end 

    if params[:comment].present? && params[:hashtag].present? 
     @comment = @current_wbp_user.wbp_user_comments.build(wbp_user_comments_params) 
     if @comment.save 
     render json: {success: true}, status: :ok 
     return 
     else 
     error_msgs << "Comment could not be created" 
     end 
    end 
    else 
    error_msgs << "Insufficient Information" 
    end 

    if error_msgs.present? 
    render json: {errors: error_msgs}, status: :unprocessable_entity 
    end 
end