Posts Tagged namespace
Namespaced resource generation with resource_controller!
Most of the time, in my projects, I need a separated administration area: http://teste.local/admin/*
For those who doesn’t know resource_controller (r_c) yet, please visit: Restful Controllers with resource_controller. I’ll never have a Rails app not using it, that’s for sure!
The goal here is to create a resource called Post and access it using http://teste.local/admin/posts .
My first thought was to try:
1 | script/generate scaffold_resource admin/Posts title:string content:text |
But it created things in a way I did not like:
- app/models/admin/posts.rb ( I really do not want my model to be in the admin folder)
- db/migrate/20090119032314_create_admin_posts.rb / create_table :admin_posts (In fact it created a admin_posts table … :-( )
I then resigned myself to the fact that I’ll have to generate in the “normal” way and then hack the generated files to adapt to what I wanted to do. Here we go:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 | script/generate scaffold_resource Posts title:string content:text exists app/models/ exists app/controllers/ exists app/helpers/ create app/views/posts exists test/functional/ exists test/unit/ create app/views/posts/index.html.erb create app/views/posts/show.html.erb create app/views/posts/new.html.erb create app/views/posts/edit.html.erb create app/views/posts/_form.html.erb create app/models/posts.rb create app/controllers/posts_controller.rb create app/helpers/posts_helper.rb create test/functional/posts_controller_test.rb create test/unit/posts_test.rb create test/fixtures/posts.yml create db/migrate create db/migrate/20090119032942_create_posts.rb route map.resources :posts |
I then changed the following:
1 2 3 4 | app/views/posts to app/views/admin/posts app/controllers/posts_controller.rb to app/controllers/admin/posts_controller.rb app/helpers/posts_helper.rb to app/helpers/admin/posts_helper.rb test/functional/posts_controller_test.rb to test/functional/admin/posts_controller_test.rb |
Don’t forget to change add Admin:: in all the .rb files that you moved.
Last thing to change is the route to the Post resource:
1 2 3 4 5 | map.resources :posts #Has to be replaced by: map.namespace :admin do |admin| admin.resources :posts #Directs /admin/posts/* to Admin::PostsController (app/controllers/admin/posts_controller.rb) end |
Namespaces configuration is pretty straight forward and there is loads of articles and websites explaining it. So if you’re confused about this, google it! ;-)
That should do it. Now you can access http://teste.local/admin/posts