# Routing to different pages with Ajax login

**URL:** <https://www.ruby-forum.com/t/routing-to-different-pages-with-ajax-login/162941>\
**Category:** Rails\
**Created:** [March 16, 2009, 12:07am UTC](https://www.ruby-forum.com/t/routing-to-different-pages-with-ajax-login/162941 "2009-03-16T00:07:45Z")\
**Posts on this page:** 8\
**Page:** 1

<div class="post-metadata">

**Author:** ![david](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/d/aeb1de/32.png) [@david](https://www.ruby-forum.com/u/david)\
**Post date:** [March 16, 2009, 12:07am UTC](https://www.ruby-forum.com/t/routing-to-different-pages-with-ajax-login/162941/1 "2009-03-16T00:07:45Z")

</div>

I have a situation where I need my ajaxed login popup to route to a  
different page than the default route. Specifically this situation is  
if they are trying to message a user and are not signed in, I want to  
show the login, and then route them to the profile that they were  
viewing and not make them have to find it again. The way I was  
thinking about doing it is to use a partial to add a hidden field that  
would contain the id of the user that is being viewed and use this id  
to render that profile instead of routing to the logged in users  
profile.

The thing is that the partial is going to look the same as the regular  
which is not good DRY policy, but I dont know how else to get the user  
id for the hidden field into the login popup. Something like:

page.replace\_html “login”, :partial =\> ‘layouts/  
login\_for\_diff\_route’, :locals =\> {:profile\_id =\> @profile\_id}

I cant really think of any other way to do it. Looking for any  
suggestions/advice/insights. Thanks.

---

<div class="post-metadata">

**Author:** ![david](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/d/aeb1de/32.png) [@david](https://www.ruby-forum.com/u/david)\
**Post date:** [March 16, 2009, 10:48am UTC](https://www.ruby-forum.com/t/routing-to-different-pages-with-ajax-login/162941/2 "2009-03-16T10:48:21Z")

</div>

I would store it in the session.

session[:return\_to] = url\_for(profile\_path(current\_profile))

---

<div class="post-metadata">

**Author:** ![david](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/d/aeb1de/32.png) [@david](https://www.ruby-forum.com/u/david)\
**Post date:** [March 17, 2009, 7:05am UTC](https://www.ruby-forum.com/t/routing-to-different-pages-with-ajax-login/162941/3 "2009-03-17T07:05:07Z")

</div>

Hi,

I think you are looking for something like this:

By using the filters to check if the user is logged in or not and  
showing  
him the login partial. Now in the controller, if the user is  
successfully  
logged in try calling a method similar to the following:

```
   redirect_back_or_default('/')

def redirect_back_or_default(default)
  session[:return_to] ? redirect_to_url(session[:return_to]) :

```

redirect\_to(default)  
session[:return\_to] = nil  
end

The above is extracted from the restful\_authentication plugin.  
There the url is getting stored in the session[:return\_to] where the  
user is  
redirected once authenticated.

Please correct me if wrong.

–  
Thank You,  
Saideep Annadatha

---

<div class="post-metadata">

**Author:** ![david](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/d/aeb1de/32.png) [@david](https://www.ruby-forum.com/u/david)\
**Post date:** [March 18, 2009, 11:07pm UTC](https://www.ruby-forum.com/t/routing-to-different-pages-with-ajax-login/162941/4 "2009-03-18T23:07:41Z")

</div>

On Mar 18, 8:51 pm, Dave L [removed\_email\_address@domain.invalid](mailto:removed_email_address@domain.invalid) wrote:

> ```
> end
> end
> 
> ```
> 
> I get an error saying redirect\_back\_or\_default is not defined. I have  
> defined this within my LoginSystem module and have included this in  
> the application file so it should be able to find it. Is there  
> anything special I need to do to use it with RJS?

You’d have to define it on the javascript generator object that gets  
yielded to you. You’re better off doing

if …  
page.redirect\_to …  
else  
page.redirect\_to …  
end

---

<div class="post-metadata">

**Author:** ![david](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/d/aeb1de/32.png) [@david](https://www.ruby-forum.com/u/david)\
**Post date:** [March 18, 2009, 9:52pm UTC](https://www.ruby-forum.com/t/routing-to-different-pages-with-ajax-login/162941/5 "2009-03-18T21:52:27Z")

</div>

Yes, that is exactly what I was looking for. I am having some trouble  
calling this custom method within an ajax call though. I am able to  
call page.redirect\_to user\_path(user) but when I try the following:

```
respond_to do |format|
      format.js do
        render :update do |page|
          page.redirect_back_or_default(user_path

```

(logged\_in\_user)) #redirect\_to user\_path(logged\_in\_user) works  
end  
end  
end

I get an error saying redirect\_back\_or\_default is not defined. I have  
defined this within my LoginSystem module and have included this in  
the application file so it should be able to find it. Is there  
anything special I need to do to use it with RJS?

On Mar 16, 11:04 pm, saideep annadatha [removed\_email\_address@domain.invalid](mailto:removed_email_address@domain.invalid)

---

<div class="post-metadata">

**Author:** ![david](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/d/aeb1de/32.png) [@david](https://www.ruby-forum.com/u/david)\
**Post date:** [March 18, 2009, 11:30pm UTC](https://www.ruby-forum.com/t/routing-to-different-pages-with-ajax-login/162941/6 "2009-03-18T23:30:35Z")

</div>

Okay, thats what I was going to do in the beginning, but the problem  
is how to define the variable for that if else statement. This is for  
a login, so for a certain page I was thinking about inserting a  
partial into the login popup form that would contain a hidden field of  
that id of the user that is being viewed. Then, in my authenticate  
action, I would check if there was a value in this field and if so,  
route to the users profiles whose id was in the hidden field and if  
there is no value, then just route to their profile. Does this work?  
Or is there a better way?

I also thought about using sessions to store the user id of the user  
who is being viewed, but i would have to clear this session if the  
popup was closed and not submitted, and im just not sure how to do  
that.

Thanks for your help.

On Mar 18, 3:07 pm, Frederick C. [removed\_email\_address@domain.invalid](mailto:removed_email_address@domain.invalid)

---

<div class="post-metadata">

**Author:** ![david](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/d/aeb1de/32.png) [@david](https://www.ruby-forum.com/u/david)\
**Post date:** [March 19, 2009, 12:11am UTC](https://www.ruby-forum.com/t/routing-to-different-pages-with-ajax-login/162941/7 "2009-03-19T00:11:42Z")

</div>

On Mar 18, 10:29 pm, Dave L [removed\_email\_address@domain.invalid](mailto:removed_email_address@domain.invalid) wrote:

> Okay, thats what I was going to do in the beginning, but the problem  
> is how to define the variable for that if else statement. This is for  
> a login, so for a certain page I was thinking about inserting a  
> partial into the login popup form that would contain a hidden field of  
> that id of the user that is being viewed. Then, in my authenticate  
> action, I would check if there was a value in this field and if so,  
> route to the users profiles whose id was in the hidden field and if  
> there is no value, then just route to their profile. Does this work?  
> Or is there a better way?

Don’t see why it wouldn’t work.

Fred

---

<div class="post-metadata">

**Author:** ![david](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/d/aeb1de/32.png) [@david](https://www.ruby-forum.com/u/david)\
**Post date:** [March 19, 2009, 2:45am UTC](https://www.ruby-forum.com/t/routing-to-different-pages-with-ajax-login/162941/8 "2009-03-19T02:45:35Z")

</div>

When I try to add the form element in a partial:

\<%= f.hidden\_field :profile\_id, :value =\> profile\_id %\>

I get an error that f is unknown. Is there a way to add form elements  
with a partial?

On Mar 18, 4:10 pm, Frederick C. [removed\_email\_address@domain.invalid](mailto:removed_email_address@domain.invalid)
