Forum: Ruby on Rails Named Route question

Announcement (2017-05-07): www.ruby-forum.com is now read-only since I unfortunately do not have the time to support and maintain the forum any more. Please see rubyonrails.org/community and ruby-lang.org/en/community for other Rails- und Ruby-related community platforms.
giorgio (Guest)
on 2008-11-28 02:40
(Received via mailing list)
I have in my routes.rb

map.resources :accounts

This is fine for the standard crud routes.

But then I add a method in the accounts_controller

def logout
  blah blah
end

I want to link to it so I do:

<%=link_to 'Logout' ,:controller=>'accounts', :action=>'logout'%>
which creates:
<a href="/accounts/logout">Logout</a>

But it just calls the 'show' method of the accounts_controller and
trys to find an account with an id of 'logout'

What am I missing here?

How can I call the logout method.
It doesn't seem to be a problem if I dont specify a controller, but in
this case the link is in the layout and needs to specify the
controller.

Cheers
George
Philip H. (Guest)
on 2008-11-28 03:08
(Received via mailing list)
On Nov 27, 2008, at 4:40 PM, giorgio wrote:

>  blah blah
>
> What am I missing here?

map.resources :accounts, :collection => {:get => :logout}

That should give you a accounts_logout_path named route you can use.
giorgio (Guest)
on 2008-11-28 03:30
(Received via mailing list)
That doesn't work.

I can do:
  map.logout 'logout', :controller => 'accounts', :action => 'logout'
Not very elegant though
But what is the point of having the default routes if you cant get to
them?

Is the idea to make a named route for everything?

G
Philip H. (Guest)
on 2008-11-28 03:41
(Received via mailing list)
On Nov 27, 2008, at 5:29 PM, giorgio wrote:

>
> That doesn't work.

I had it backwards.

Try this.

map.resources :accounts, :collection => {:logout => get}
giorgio (Guest)
on 2008-11-28 03:52
(Received via mailing list)
map.resources :accounts, :collection => {:logout => :get}

works...(:get not get)
Andrew B. (Guest)
on 2008-11-28 07:21
(Received via mailing list)
You can make named routes for everything using the technique Phillip
posted, you could rearrange your actions to be more restful (maybe a
sessions controller, and map login to sessions#create, or move your
default routes to a different position in the routes file (order is
important here).
This topic is locked and can not be replied to.