# Namespaced and nested controllers/resouces

**URL:** <https://www.ruby-forum.com/t/namespaced-and-nested-controllers-resouces/157807>\
**Category:** Rails\
**Created:** [January 15, 2009, 2:29pm UTC](https://www.ruby-forum.com/t/namespaced-and-nested-controllers-resouces/157807 "2009-01-15T14:29:17Z")\
**Posts on this page:** 6\
**Page:** 1

<div class="post-metadata">

**Author:** ![Dmitrij\_S](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/d/dfb087/32.png) [@Dmitrij\_S](https://www.ruby-forum.com/u/Dmitrij_S)\
**Post date:** [January 15, 2009, 2:29pm UTC](https://www.ruby-forum.com/t/namespaced-and-nested-controllers-resouces/157807/1 "2009-01-15T14:29:17Z")

</div>

Hello,

My controllers:

- ForumsController
- Forum::TopicsController
- Forum::Topic::PostsController

Resources:

map.resources :forums do |forums|  
forums.resources :topics, :controller =\> “forum/topics” do |topics|  
topics.resources :posts, :controller =\> “forum/topic/posts”  
end  
end

Is it a good design? Problem is that only way to get a post path is to  
call:

forum\_topic\_post\_path(post.topic.forum, post.topic, post)

---

<div class="post-metadata">

**Author:** ![Dmitrij\_S](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/d/dfb087/32.png) [@Dmitrij\_S](https://www.ruby-forum.com/u/Dmitrij_S)\
**Post date:** [January 15, 2009, 4:22pm UTC](https://www.ruby-forum.com/t/namespaced-and-nested-controllers-resouces/157807/2 "2009-01-15T16:22:53Z")

</div>

On Thu, Jan 15, 2009 at 3:28 PM, Dmitrij S. [removed\_email\_address@domain.invalid](mailto:removed_email_address@domain.invalid)  
wrote:

> map.resources :forums do |forums|

There’s no need to have namespaces in your controllers

- ForumsController
- Forum::TopicsController
- Forum::Topic::PostsController

could be

ForumsController  
TopicsController  
PostsController

and then your resources can be:

map.resources :forums do |forums|  
forums.resources :topics do |topics|  
topics.resources :posts  
end  
end

it will still give you long urls like /forums/1/topics/1/posts/1

I’ve done some changes to get slightly shorter urls like this:

map.resources :forums, :as =\> ‘f’ do |forums|  
forums.resources :topics, :as =\> ‘t’ do |topics|  
topics.resources :posts, :as ‘p’  
end  
end

which then makes ther urls /f/1/t/1/p/1 and then if you use to\_param in  
your  
models, you can get /f/1-my-forum/t/1-my-topic/p/1-my-post

The to\_param is done in the model

class Forum \< ActiveRecord::Base  
def to\_param  
“#{id}-#{name.downcase.gsub(/[^0-9a-z]+/, ‘-’)”  
end  
end

–  
Andrew T.  
[http://ramblingsonrails.com](http://ramblingsonrails.com)  
[http://www.linkedin.com/in/andrewtimberlake](http://www.linkedin.com/in/andrewtimberlake)

“I have never let my schooling interfere with my education” - Mark Twain

---

<div class="post-metadata">

**Author:** ![Dmitrij\_S](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/d/dfb087/32.png) [@Dmitrij\_S](https://www.ruby-forum.com/u/Dmitrij_S)\
**Post date:** [January 15, 2009, 4:48pm UTC](https://www.ruby-forum.com/t/namespaced-and-nested-controllers-resouces/157807/3 "2009-01-15T16:48:54Z")

</div>

Ok. But what if i will have following models:

Video, Audio, Video::Playlist, Audio::Playlist

and resouces:

video → has\_many → video/playlists  
audio → has\_many → audio/playlists

On 15 ÑÎ×, 17:22, “Andrew T.” [removed\_email\_address@domain.invalid](mailto:removed_email_address@domain.invalid)

---

<div class="post-metadata">

**Author:** ![Dmitrij\_S](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/d/dfb087/32.png) [@Dmitrij\_S](https://www.ruby-forum.com/u/Dmitrij_S)\
**Post date:** [January 16, 2009, 10:56am UTC](https://www.ruby-forum.com/t/namespaced-and-nested-controllers-resouces/157807/4 "2009-01-16T10:56:35Z")

</div>

So if you have BlogPost, ForumPost, FooPost, BarPost, etc. you suggest  
make a single controller?

On 15 ÑÎ×, 18:12, “Andrew T.” [removed\_email\_address@domain.invalid](mailto:removed_email_address@domain.invalid)

---

<div class="post-metadata">

**Author:** ![Dmitrij\_S](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/d/dfb087/32.png) [@Dmitrij\_S](https://www.ruby-forum.com/u/Dmitrij_S)\
**Post date:** [January 15, 2009, 5:13pm UTC](https://www.ruby-forum.com/t/namespaced-and-nested-controllers-resouces/157807/5 "2009-01-15T17:13:05Z")

</div>

2009/1/15 Dmitrij S. [removed\_email\_address@domain.invalid](mailto:removed_email_address@domain.invalid)

> Ok. But what if i will have following models:
> 
> Video, Audio, Video::Playlist, Audio::Playlist
> 
> and resouces:
> 
> video → has\_many → video/playlists  
> audio → has\_many → audio/playlists

I would probably make a single playlist model/controller that could deal  
with both audio and video

Your way isn’t wrong, I was just suggesting another way

–  
Andrew T.  
[http://ramblingsonrails.com](http://ramblingsonrails.com)  
[http://www.linkedin.com/in/andrewtimberlake](http://www.linkedin.com/in/andrewtimberlake)

“I have never let my schooling interfere with my education” - Mark Twain

---

<div class="post-metadata">

**Author:** ![Dmitrij\_S](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/d/dfb087/32.png) [@Dmitrij\_S](https://www.ruby-forum.com/u/Dmitrij_S)\
**Post date:** [January 19, 2009, 8:17am UTC](https://www.ruby-forum.com/t/namespaced-and-nested-controllers-resouces/157807/6 "2009-01-19T08:17:15Z")

</div>

2009/1/16 Dmitrij S. [removed\_email\_address@domain.invalid](mailto:removed_email_address@domain.invalid)

> So if you have BlogPost, ForumPost, FooPost, BarPost, etc. you suggest  
> make a single controller?

Not a definitive ‘yes’ but in some cases it can work especially if the  
playlist has exactly the same functionality but is working on more than  
one  
type of model.

> > –  
> > Andrew T.[http://ramblingsonrails.comhttp](http://ramblingsonrails.comhttp)://  
> > [www.linkedin.com/in/andrewtimberlake](http://www.linkedin.com/in/andrewtimberlake)
> > 
> > “I have never let my schooling interfere with my education” - Mark Twain

–  
Andrew T.  
[http://ramblingsonrails.com](http://ramblingsonrails.com)  
[http://www.linkedin.com/in/andrewtimberlake](http://www.linkedin.com/in/andrewtimberlake)

“I have never let my schooling interfere with my education” - Mark Twain
