Rendering in ApplicationController fails.

Hi experts,

Just trying to see if anyone on this list can answer my question:

http://stackoverflow.com/questions/5545877/rendering-in-applicationcontroller-fails

Basically, the problem is as follows:

* I have several methods such as render_not_found, render_internal_error etc. in ApplicationController. Each of these goes something like this:

rescue_from ActiveRecord::RecordInvalid do |err|   render_bad_request err.message end

def render_bad_request(message="bad request")   respond_to do |wants|     wants.json {       errmsg = {:error => 'failure', :message => message }       render :status => 400, :json => errmsg and return     }   end end

And in my actual controller

def create   @resource.transaction do    # a lot of stuff...   end

  render_created @resource, :location => build_link(@resource) end

The problem is, whenever an ActiveRecord::RecordInvalid (or any other exception I am rescuing from) is raised, the render_* method in ApplicationController runs, but it then continues execution in the action as though no render happened (so it leads to DoubleRender)

Any way I could fix this / rewrite the rendering methods?

Best, Radhesh

Hi experts,

Just trying to see if anyone on this list can answer my question:

http://stackoverflow.com/questions/5545877/rendering-in-applicationcontroller-fails

Basically, the problem is as follows:

* I have several methods such as render_not_found, render_internal_error etc. in ApplicationController. Each of these goes something like this:

rescue_from ActiveRecord::RecordInvalid do |err| render_bad_request err.message

Try putting a return in here, though I am not sure whether it will work. I have not looked at how rescue_from is implemented. Worth a try though.

Colin

Colin Law wrote in post #991306:

rescue_from ActiveRecord::RecordInvalid do |err| render_bad_request err.message

Try putting a return in here, though I am not sure whether it will work. I have not looked at how rescue_from is implemented. Worth a try though.

No dice. I have tried putting return, and return etc. It does not work.

Hi experts,

Just trying to see if anyone on this list can answer my question:

http://stackoverflow.com/questions/5545877/rendering-in-applicationco

The code over there looks very different to the code you've posted below. Which is the most current?

The problem is, whenever an ActiveRecord::RecordInvalid (or any other exception I am rescuing from) is raised, the render_* method in ApplicationController runs, but it then continues execution in the action as though no render happened (so it leads to DoubleRender)

When are the exceptions raised? if they are raised after you have called render for the first time, then it's too late for your rescue_from handler to try and render something else.

Fred

Frederick Cheung wrote in post #991310:

Hi experts,

Just trying to see if anyone on this list can answer my question:

http://stackoverflow.com/questions/5545877/rendering-in-applicationco

The code over there looks very different to the code you've posted below. Which is the most current?

The code I have posted to this list is the more recent.

The problem is, whenever an ActiveRecord::RecordInvalid (or any other exception I am rescuing from) is raised, the render_* method in ApplicationController runs, but it then continues execution in the action as though no render happened (so it leads to DoubleRender)

When are the exceptions raised? if they are raised after you have called render for the first time, then it's too late for your rescue_from handler to try and render something else.

No render is called before the exceptions are raised. Is there a way I can check whether rendering has occurred in my render_* methods? I am sure that render has not occurred before the exception is raised, but I would be interested to know nevertheless.