Hi all, I have select box in one of my views which lists a few contacts. I also have an option in this select box to add a new contact. There is also an observe_field hook to this select box that Ajax requests further info about the selected contact from the controller and displays it in an adjacent "info" div. Now, I need to redirect the user to the New Contact page from the controller if the selected value from the select box is "new contact". This is the controller code I have now .... if request.xml_http_request? if !@contact.blank? render :partial => "show", :layout => false elsif params[:id] == "new contact" redirect_to new_contact_path else render :text => "Please select a contact" end end This renders the New Contact page in the "info" div. Whereas, I want the user to be completely redirected to the New Contact page like a HTTP response would. Any thoughts on how I can handle this? Any ideas welcome.. Thanks! --~--~---------~--~----~------------~-------~--~----~ You received this message because you are subscribed to the Google Groups "Ruby on Rails: Talk" group. To post to this group, send email to rubyonrails-talk-/JYPxA39Uh5TLH3MbocFFw@public.gmane.org To unsubscribe from this group, send email to rubyonrails-talk+unsubscribe-/JYPxA39Uh5TLH3MbocFFw@public.gmane.org For more options, visit this group at http://groups.google.com/group/rubyonrails-talk?hl=en -~----------~----~----~----~------~----~------~--~---
Frederick Cheung
2009-Apr-08 07:20 UTC
Re: Conditionally respond with HTTP redirect for xml_http_request
On Apr 8, 6:51 am, Ram <yourstruly.vi...-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org> wrote:> Hi all, > > I have select box in one of my views which lists a few contacts. > I also have an option in this select box to add a new contact. > There is also an observe_field hook to this select box that Ajax > requests further info about the selected contact from the controller > and displays it in an adjacent "info" div. > > Now, I need to redirect the user to the New Contact page from the > controller if the selected value from the select box is "new contact". > > This is the controller code I have now > .... > if request.xml_http_request? > if !...@contact.blank? > render :partial => "show", :layout => false > elsif params[:id] == "new contact" > redirect_to new_contact_path > else > render :text => "Please select a contact" > end > end > > This renders the New Contact page in the "info" div. Whereas, I want > the user to be completely redirected to the New Contact page like a > HTTP response would. > Any thoughts on how I can handle this? Any ideas welcome.. > Thanks!Two ways of doing this: either the observe_field thingy has a callback that redirects in the right circumstances or you switch to using render :update (and then use page.redirect_to), In the latter case you have to use render :update for all of these 3 possibilities and you need to change your observe_field invocation to not pass the :update option. Fred --~--~---------~--~----~------------~-------~--~----~ You received this message because you are subscribed to the Google Groups "Ruby on Rails: Talk" group. To post to this group, send email to rubyonrails-talk-/JYPxA39Uh5TLH3MbocFFw@public.gmane.org To unsubscribe from this group, send email to rubyonrails-talk+unsubscribe@googlegroups.com For more options, visit this group at http://groups.google.com/group/rubyonrails-talk?hl=en -~----------~----~----~----~------~----~------~--~---
Ram
2009-Apr-08 07:38 UTC
Re: Conditionally respond with HTTP redirect for xml_http_request
Hi Fred, Thanks for your response. render :update Ive got quite a few Ruby conditions and styling going in the js.erb file im using now to display the contact information. And ive got more possibilities than the 3 ive shown above in the controller. So this might not be the right option for me. Right? observe_field callback This might work for me. Right now, the only callbacks I have on the observe_field are showing and hiding the spinner. I have never written custom callbacks on Rails JS helpers. Could you help me through this? So im guessing I should be having something like this <%= observe_field ''contact_id'', :frequency => 0.5, :update => ''info'', :before => "Element.show(''spinner'')", :success => "handle_contact_request(value);", :url => show_contact_path,:method =>:get, :with => ''contact_id'' %> and in application.js function handle_contact_request(value){ Element.hide(''spinner''); if value=="new contact" { //how do i redirect to the New Contact page? } else { //show contact info. But how do I handle the conditions and styling?? } } Am I getting the basic idea right? If yes, how can I handle the conditional redirecting and the rest in Javascript? Thanks again Fred. On Apr 8, 12:20 pm, Frederick Cheung <frederick.che...-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org> wrote:> On Apr 8, 6:51 am, Ram <yourstruly.vi...-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org> wrote: > > > > > Hi all, > > > I have select box in one of my views which lists a few contacts. > > I also have an option in this select box to add a new contact. > > There is also an observe_field hook to this select box that Ajax > > requests further info about the selected contact from the controller > > and displays it in an adjacent "info" div. > > > Now, I need to redirect the user to the New Contact page from the > > controller if the selected value from the select box is "new contact". > > > This is the controller code I have now > > .... > > if request.xml_http_request? > > if !...@contact.blank? > > render :partial => "show", :layout => false > > elsif params[:id] == "new contact" > > redirect_to new_contact_path > > else > > render :text => "Please select a contact" > > end > > end > > > This renders the New Contact page in the "info" div. Whereas, I want > > the user to be completely redirected to the New Contact page like a > > HTTP response would. > > Any thoughts on how I can handle this? Any ideas welcome.. > > Thanks! > > Two ways of doing this: either the observe_field thingy has a callback > that redirects in the right circumstances or you switch to using > render :update (and then use page.redirect_to), In the latter case you > have to use render :update for all of these 3 possibilities and you > need to change your observe_field invocation to not pass the :update > option. > > Fred--~--~---------~--~----~------------~-------~--~----~ You received this message because you are subscribed to the Google Groups "Ruby on Rails: Talk" group. To post to this group, send email to rubyonrails-talk-/JYPxA39Uh5TLH3MbocFFw@public.gmane.org To unsubscribe from this group, send email to rubyonrails-talk+unsubscribe@googlegroups.com For more options, visit this group at http://groups.google.com/group/rubyonrails-talk?hl=en -~----------~----~----~----~------~----~------~--~---
Frederick Cheung
2009-Apr-08 07:57 UTC
Re: Conditionally respond with HTTP redirect for xml_http_request
On Apr 8, 8:38 am, Ram <yourstruly.vi...-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org> wrote:> Hi Fred, > > Thanks for your response. > > render :update > Ive got quite a few Ruby conditions and styling going in the js.erb > file im using now to display the contact information. And ive got more > possibilities than the 3 ive shown above in the controller. So this > might not be the right option for me. Right?I''m not sure this would be a problem - seems like a few calls to page.replace_html ''info'', :partial => ''blah'' would do it in the other cases.> > observe_field callback > This might work for me. Right now, the only callbacks I have on the > observe_field are showing and hiding the spinner. I have never written > custom callbacks on Rails JS helpers. Could you help me through this? > > So im guessing I should be having something like this > > <%= observe_field ''contact_id'', :frequency => 0.5, :update => > ''info'', :before => "Element.show(''spinner'')", > :success => "handle_contact_request(value);", :url => > show_contact_path,:method =>:get, > :with => ''contact_id'' %> >Nearly. your success callback gets 2 thigns: response and responseJSON. responseJSON contains whatever JSON you put in the X- JSON header of your response. You callback can be as simple as check_for_redirect(json){ if(json && json.redirect) page.location = json.redirect } and then pass :success => "check_for_redirect(responseJSON)". All you need to do is to set that header appropriately if you want a redirect to happen. Fred --~--~---------~--~----~------------~-------~--~----~ You received this message because you are subscribed to the Google Groups "Ruby on Rails: Talk" group. To post to this group, send email to rubyonrails-talk-/JYPxA39Uh5TLH3MbocFFw@public.gmane.org To unsubscribe from this group, send email to rubyonrails-talk+unsubscribe@googlegroups.com For more options, visit this group at http://groups.google.com/group/rubyonrails-talk?hl=en -~----------~----~----~----~------~----~------~--~---
Ram
2009-Apr-08 08:46 UTC
Re: Conditionally respond with HTTP redirect for xml_http_request
:) You were right. It was easy enough to use render :update and replace_html with :partial to accomplish it. I am however curious as to how we can do this using JSON. I started reading about JSON for another feature I needed but I realised I dint need JSON for it. I feel it would be a good exercise for me to implement it in tackling this problem. Could you explain a little bit more about the code you have shown me above or point me to where I can find the documentation explaining this? From what I remember, JSON is a format (Object Notation) to represent ActiveRecord objects (in Rails) for JS to handle. But setting the header, responseJSON et all is new to me. Thanks Fred! On Apr 8, 12:57 pm, Frederick Cheung <frederick.che...-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org> wrote:> On Apr 8, 8:38 am, Ram <yourstruly.vi...-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org> wrote: > > > Hi Fred, > > > Thanks for your response. > > > render :update > > Ive got quite a few Ruby conditions and styling going in the js.erb > > file im using now to display the contact information. And ive got more > > possibilities than the 3 ive shown above in the controller. So this > > might not be the right option for me. Right? > > I''m not sure this would be a problem - seems like a few calls to > page.replace_html ''info'', :partial => ''blah'' would do it in the other > cases. > > > > > observe_field callback > > This might work for me. Right now, the only callbacks I have on the > > observe_field are showing and hiding the spinner. I have never written > > custom callbacks on Rails JS helpers. Could you help me through this? > > > So im guessing I should be having something like this > > > <%= observe_field ''contact_id'', :frequency => 0.5, :update => > > ''info'', :before => "Element.show(''spinner'')", > > :success => "handle_contact_request(value);", :url => > > show_contact_path,:method =>:get, > > :with => ''contact_id'' %> > > Nearly. your success callback gets 2 thigns: response and > responseJSON. responseJSON contains whatever JSON you put in the X- > JSON header of your response. You callback can be as simple as > > check_for_redirect(json){ > if(json && json.redirect) > page.location = json.redirect > > } > > and then pass :success => "check_for_redirect(responseJSON)". All you > need to do is to set that header appropriately if you want a redirect > to happen. > > Fred--~--~---------~--~----~------------~-------~--~----~ You received this message because you are subscribed to the Google Groups "Ruby on Rails: Talk" group. To post to this group, send email to rubyonrails-talk-/JYPxA39Uh5TLH3MbocFFw@public.gmane.org To unsubscribe from this group, send email to rubyonrails-talk+unsubscribe@googlegroups.com For more options, visit this group at http://groups.google.com/group/rubyonrails-talk?hl=en -~----------~----~----~----~------~----~------~--~---
Ram
2009-Apr-08 08:57 UTC
Re: Conditionally respond with HTTP redirect for xml_http_request
I am trying to implement Craig Ambrose''s Redbox for some form submissions. Ideally for me, when the user selects "Add contact" a redbox modal window should open with the New Contact form and on submission, the contacts select box on the main page should get updated with the newly added contact. I was looking into invoking Redbox from the controller for this (http://ahref.in/8dc58) but I couldnt quite grasp the discussion there. Can Redbox be brought in here without too much trouble? thanks again for you inputs! On Apr 8, 1:46 pm, Ram <yourstruly.vi...-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org> wrote:> :) You were right. It was easy enough to use render :update and > replace_html with :partial to accomplish it. > > I am however curious as to how we can do this using JSON. I started > reading about JSON for another feature I needed but I realised I dint > need JSON for it. I feel it would be a good exercise for me to > implement it in tackling this problem. Could you explain a little bit > more about the code you have shown me above or point me to where I can > find the documentation explaining this? From what I remember, JSON is > a format (Object Notation) to represent ActiveRecord objects (in > Rails) for JS to handle. But setting the header, responseJSON et all > is new to me. > > Thanks Fred! > > On Apr 8, 12:57 pm, Frederick Cheung <frederick.che...-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org> > wrote: > > > On Apr 8, 8:38 am, Ram <yourstruly.vi...-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org> wrote: > > > > Hi Fred, > > > > Thanks for your response. > > > > render :update > > > Ive got quite a few Ruby conditions and styling going in the js.erb > > > file im using now to display the contact information. And ive got more > > > possibilities than the 3 ive shown above in the controller. So this > > > might not be the right option for me. Right? > > > I''m not sure this would be a problem - seems like a few calls to > > page.replace_html ''info'', :partial => ''blah'' would do it in the other > > cases. > > > > observe_field callback > > > This might work for me. Right now, the only callbacks I have on the > > > observe_field are showing and hiding the spinner. I have never written > > > custom callbacks on Rails JS helpers. Could you help me through this? > > > > So im guessing I should be having something like this > > > > <%= observe_field ''contact_id'', :frequency => 0.5, :update => > > > ''info'', :before => "Element.show(''spinner'')", > > > :success => "handle_contact_request(value);", :url => > > > show_contact_path,:method =>:get, > > > :with => ''contact_id'' %> > > > Nearly. your success callback gets 2 thigns: response and > > responseJSON. responseJSON contains whatever JSON you put in the X- > > JSON header of your response. You callback can be as simple as > > > check_for_redirect(json){ > > if(json && json.redirect) > > page.location = json.redirect > > > } > > > and then pass :success => "check_for_redirect(responseJSON)". All you > > need to do is to set that header appropriately if you want a redirect > > to happen. > > > Fred--~--~---------~--~----~------------~-------~--~----~ You received this message because you are subscribed to the Google Groups "Ruby on Rails: Talk" group. To post to this group, send email to rubyonrails-talk-/JYPxA39Uh5TLH3MbocFFw@public.gmane.org To unsubscribe from this group, send email to rubyonrails-talk+unsubscribe@googlegroups.com For more options, visit this group at http://groups.google.com/group/rubyonrails-talk?hl=en -~----------~----~----~----~------~----~------~--~---