OSDN Git Service

Adds a reusable method to render API response on validation failure.
authorJean-Philippe Lang <jp_lang@yahoo.fr>
Fri, 3 Dec 2010 11:51:06 +0000 (11:51 +0000)
committerJean-Philippe Lang <jp_lang@yahoo.fr>
Fri, 3 Dec 2010 11:51:06 +0000 (11:51 +0000)
git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@4455 e93f8b46-1217-0410-a6f0-8f06a7374b81

app/controllers/application_controller.rb
app/controllers/users_controller.rb

index bbcc265..d5241ff 100644 (file)
@@ -413,5 +413,17 @@ class ApplicationController < ActionController::Base
       { attribute => error }
     end.to_json
   end
-  
+
+  # Renders API response on validation failure
+  def render_validation_errors(object)
+    options = { :status => :unprocessable_entity, :layout => false }
+    options.merge!(case params[:format]
+      when 'xml';  { :xml =>  object.errors }
+      when 'json'; { :json => {'errors' => object.errors} } # ActiveResource client compliance
+      else
+        raise "Unknown format #{params[:format]} in #render_validation_errors"
+      end
+    )
+    render options
+  end
 end
index fef13c7..5d80c29 100644 (file)
@@ -122,8 +122,7 @@ class UsersController < ApplicationController
 
       respond_to do |format|
         format.html { render :action => 'new' }
-        format.json { render :json => {:errors => @user.errors}, :status => :unprocessable_entity, :layout => false }
-        format.xml  { render :xml  => @user.errors, :status => :unprocessable_entity, :layout => false }
+        format.api  { render_validation_errors(@user) }
       end
     end
   end
@@ -180,8 +179,7 @@ class UsersController < ApplicationController
 
       respond_to do |format|
         format.html { render :action => :edit }
-        format.json { render :json => {:errors => @user.errors}, :status => :unprocessable_entity, :layout => false }
-        format.xml  { render :xml  => @user.errors, :status => :unprocessable_entity, :layout => false }
+        format.api  { render_validation_errors(@user) }
       end
     end
   rescue ::ActionController::RedirectBackError