Nested renders in the same call


#1

Hi there,

So I have discovered that I can’t do nested renders or redirects in the
same rails call.

This is a shame as it prevents me from doing some things I was
intending, such as being able to render editable components, e.g. you
render a note component, but then you can edit it, or cancel it.

I can get round this by copying the show.rhtml for the note and giving
it the name update.rhtml, and then having the output of the update
action display the edited note, but I’m breaking the DRY principle here.

Also I’d like to be able to offer the user different options such as
cancelling the edit, previewing etc. I guess I can hack my way out of
this but it doesn’t seem very pretty.

Does anyone know why rails doesn’t support nested rendering.redirecting
in the same call?

Many thanks in advance.

CHEERS> SAM


#2

On Dec 8, 2005, at 8:28 PM, Sam J. wrote:

Hi there,

So I have discovered that I can’t do nested renders or redirects in
the
same rails call.

Are you sure about that? Many moons ago I used render_component in
my view files to call other controllers or actions that would, in
turn, render their views. I imagine there’s a fancy
render :component => {:controller => ‘/member’, :action => ‘signup’}
type of thing now. Are you calling render_component (or its
equivalent) in the view file? Or is that not the kind of nesting you
mean?

Duane J.
(canadaduane)


#3

Hi Duane,

I’m pretty sure. I get this error:

ActionController::DoubleRenderError in Workspaces#update_note

Can only render or redirect once per action

RAILS_ROOT: D:/user/Code/ruby/prometheus/public/…/config/…
Application Trace | Framework Trace | Full Trace

D:/ruby/lib/ruby/gems/1.8/gems/actionpack-1.11.0/lib/action_controller/base.rb:579:in
render_with_no_layout' D:/ruby/lib/ruby/gems/1.8/gems/actionpack-1.11.0/lib/action_controller/layout.rb:226:inrender_without_benchmark’
D:/ruby/lib/ruby/gems/1.8/gems/actionpack-1.11.0/lib/action_controller/benchmarking.rb:53:in
render' D:/ruby/lib/ruby/gems/1.8/gems/actionpack-1.11.0/lib/action_controller/benchmarking.rb:53:inmeasure’
D:/ruby/lib/ruby/gems/1.8/gems/actionpack-1.11.0/lib/action_controller/benchmarking.rb:53:in
render' #{RAILS_ROOT}/app/controllers/application.rb:51:incomponentize’
#{RAILS_ROOT}/app/controllers/workspaces_controller.rb:97:in
`update_note’
#{RAILS_ROOT}/app/views/workspaces/show.rhtml:17

I have render_component in my workspaces/show view, which then renders a
workpaces/update_note, as long as workspaces/update_note doesn’t include
an explicit render or redirect it works fine - if I render or redirect
anything I get the above error.

CHEERS> SAM


#4

Ah and I found an explanation:

http://jamis.jamisbuck.org/articles/2005/07/08/rails-tip-of-the-day

CHEERS> SAM


#5

On Dec 9, 2005, at 11:20 AM, Sam J. wrote:

Ah and I found an explanation:

http://jamis.jamisbuck.org/articles/2005/07/08/rails-tip-of-the-day

CHEERS> SAM

Although not recommended for most situations, you can call
erase_render_results, or simply set @performed_render = false to
clear the DoubleRenderError. Not sure what would happen if you do
though…

Reminds me of Ren and Stimpy “Don’t press that RED BUTTON!! We don’t
know what it will dooooo…”

Duane J.
(canadaduane)