# New controller actions and url\_for

**URL:** <https://www.ruby-forum.com/t/new-controller-actions-and-url-for/150483>\
**Category:** Rails\
**Created:** [October 9, 2008, 1:41am UTC](https://www.ruby-forum.com/t/new-controller-actions-and-url-for/150483 "2008-10-09T01:41:23Z")\
**Posts on this page:** 3\
**Page:** 1

<div class="post-metadata">

**Author:** ![amrita](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/a/dc4da7/32.png) [@amrita](https://www.ruby-forum.com/u/amrita)\
**Post date:** [October 9, 2008, 1:41am UTC](https://www.ruby-forum.com/t/new-controller-actions-and-url-for/150483/1 "2008-10-09T01:41:23Z")

</div>

Hi,

I just defined a new controller action “list” for one of my  
controllers, let’s call it “species”. To routes.rb, I added the  
following entry:

map.resource :species, :member =\> { :list =\> :get }

I have a helper method in which I use url\_for as follows:

url\_for(:controller =\> ‘species’, :action =\> ‘list’, :params =\>  
params.merge({:sort =\> key, :page =\> nil}))

When I call this helper method from the view, it completely bypasses  
the action in the generated URL. I get a URL as follows:

[http://myserver.mydomain.org:8080/species?sort=sortparam](http://myserver.mydomain.org:8080/species?sort=sortparam)

What I expect to get is a URL as follows:

[http://myserver.mydomain.org:8080/species/list?sort=sortparam](http://myserver.mydomain.org:8080/species/list?sort=sortparam)

I did a `rake routes | grep list` and I do get the following two  
lines:

list\_species GET /species/  
list  
{:controller=\>“species”, :action=\>“list”}  
formatted\_list\_species GET /species/  
list.:format  
{:controller=\>“species”, :action=\>“list”}

Could someone please point out what needs to be corrected for url\_for  
to work properly? Is url\_for not finding a route for  
controller=species and action=list or is there some other problem?

Many thanks!  
Amrita

---

<div class="post-metadata">

**Author:** ![amrita](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/a/dc4da7/32.png) [@amrita](https://www.ruby-forum.com/u/amrita)\
**Post date:** [October 9, 2008, 3:57am UTC](https://www.ruby-forum.com/t/new-controller-actions-and-url-for/150483/2 "2008-10-09T03:57:51Z")

</div>

What you want is a collection, not a member:

map.resource :species, :collection =\> { :list =\> :get }

Also, instead of using url\_for, you could use list\_species\_path( :sort  
=\> key, :page =\> nil )

On Wed, Oct 8, 2008 at 8:40 PM, amrita [removed\_email\_address@domain.invalid](mailto:removed_email_address@domain.invalid) wrote:

> [http://myserver.mydomain.org:8080/species/list?sort=sortparam](http://myserver.mydomain.org:8080/species/list?sort=sortparam)
> 
> Could someone please point out what needs to be corrected for url\_for  
> to work properly? Is url\_for not finding a route for  
> controller=species and action=list or is there some other problem?
> 
> Many thanks!  
> Amrita
> 
> >

–  
Maurício Linhares  
[http://alinhavado.wordpress.com/](http://alinhavado.wordpress.com/) (pt-br) | [http://blog.codevader.com/](http://blog.codevader.com/)  
(en)  
João Pessoa, PB, +55 83 8867-7208

---

<div class="post-metadata">

**Author:** ![amrita](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/a/dc4da7/32.png) [@amrita](https://www.ruby-forum.com/u/amrita)\
**Post date:** [October 9, 2008, 7:48pm UTC](https://www.ruby-forum.com/t/new-controller-actions-and-url-for/150483/3 "2008-10-09T19:48:37Z")

</div>

Thank you!

On Oct 8, 6:56 pm, “Maurício Linhares” [removed\_email\_address@domain.invalid](mailto:removed_email_address@domain.invalid)
