I have an ajax call method like following:
Instead of redirect_to render a partial with a line of JS like this:
<script type="text/javascript">document.location="/login"</script>
HTH,
Hi daociyiyou ,
Try this:
def find_created_actions unless @if_login flash[:login]="..." redirect_to(:controller=>"login",:action=>"login") end if @if_login @user_cactions=@user.sponsored_actions render :update do |page| page.replace_html 'element_id', :partial => "created_actions", :object => @user_cactions end else render :update do |page| page.redirect_to(:controller=>"login",:action=>"login") end end end
And make sure you're *not* using the :update option on your remote_form. 'page.redirect_to()' will generate javascript similar to Hassan's aforementioned suggestion.
Sjoerd Andringa wrote:
Hi daociyiyou ,
Try this:
def find_created_actions unless @if_login flash[:login]="..." redirect_to(:controller=>"login",:action=>"login") end if @if_login @user_cactions=@user.sponsored_actions render :update do |page| page.replace_html 'element_id', :partial => "created_actions", :object => @user_cactions end else render :update do |page| page.redirect_to(:controller=>"login",:action=>"login") end end end
And make sure you're *not* using the :update option on your remote_form. 'page.redirect_to()' will generate javascript similar to Hassan's aforementioned suggestion.
Hi, just a note that this does not work. Because the redirect gets trapped inside the Ajax call. If you use firebug you can see what happens.
So it seems the only way to redirect is to use a javascript redirect as mentioned on:
Vicer Ontero wrote:
And make sure you're *not* using the :update option on your remote_form. 'page.redirect_to()' will generate javascript similar to Hassan's aforementioned suggestion.
Hi, just a note that this does not work. Because the redirect gets trapped inside the Ajax call. If you use firebug you can see what happens.
So it seems the only way to redirect is to use a javascript redirect as mentioned on: asp.net - Cannot do response.redirect from page with Ajax controls - Stack Overflow
You're right. There's a confinient helper to generate the right javascript (redirect_to (ActionView::Helpers::PrototypeHelper::JavaScriptGenerator::GeneratorMethods) - APIdock):
def find_created_actions unless @if_login render :update do |page| flash[:login]="..." page.redirect_to(:controller=>"login",:action=>"login") end end [...] end
Here is a cleaner way. Just put the following code on your application_controller.rb. Now, redirect_to should work with Ajax calls as well as regular requests.
def redirect_to(options = {}, response_status = {}) if request.xhr? render(:update) {|page| page.redirect_to(options)} else super(options, response_status) end end
Cheers, Glen
Glen's solution works perfect ! Thank you very much, your tip is a must have of every rails project, IMHO