如果任何条件失败,我正在尝试呈现错误消息。如何传递与失败条件相关的错误消息
但它给了我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
答案 0 :(得分:2)
您需要为此块中的每个渲染添加and return
if user.present?
...
end
退出功能。示例:
render json: {errors: "User not associated with this wbp user"}, status: :unprocessable_entity and return
答案 1 :(得分: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
答案 2 :(得分: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