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 -~----------~----~----~----~------~----~------~--~---