Stupid Rails rendering

I dont’ understand why it’s not possible to have a conditional
redirection in rendering

respond_to do |format|
format.js {
   render :update do |page|
     page.redirect_to posts_url if @located
     page.replace_html 'error_message', "Error..."
     page << "$('popup_error').popup.show();"
   end
 }
end

raise an error… => Can only render or redirect once per action
what shoudl do if I don"t want to render OR redirect

respond_to do |format|
format.js {
   page.redirect_to posts_url if @located
   render :update do |page|
     page.replace_html 'error_message', "Error..."
     page << "$('popup_error').popup.show();"
   end
 }
end

tfyl

kad

There is no stupid errors here… when you open a render block, you are
rendering a template at this moment… you can’t do other render or
redirect inside… you can have a conditional redirection, but not
inside a render, its pure logic.

Try doing it:

respond_to do |format|
format.js {
if @located
page.redirect_to posts_url
else
render :update do |page|
page.replace_html ‘error_message’, “Error…”
page << “$(‘popup_error’).popup.show();”
end
end
}
end

It’s similar, but not the same.

Kad

You have probably already spotted it, but just in case:

respond_to do |format|
format.js {
if @located
page.redirect_to posts_url
else
render :update do |page|
page.replace_html ‘error_message’, “Error…”
page << “$(‘popup_error’).popup.show();”
end
end
}
end

In the line - page.redirect, page is out of scope.

Will work if you do:

render :update do |page|
if @located
page.redirect_to posts_url
else
page.replace_html ‘error_message’, “Error…”
page << “$(‘popup_error’).popup.show();”
end
end

The reason it needs to be this way is that redirect does not cause the
method to immediately exit, so the other render
statements were getting executed, causing the error.

tonypm

tonypm wrote:

Kad

You have probably already spotted it, but just in case:

The reason it needs to be this way is that redirect does not cause the
method to immediately exit, so the other render
statements were getting executed, causing the error.

tonypm

thanks a lot , yes I spotted it after rewritting the bloc line by
line…
I re-checked all other blocks I had with some begin - rescue -
redirect_to