Greetings folks, I''m looking for some confirmation before I go further astray. I decided to anticipate future growth and rather than use a flat controller directory (app/controllers ) without subfolders , I would try a ''tree'' structure with subfolders (app/controllers/admin, app/ controllers/info, etc.). Duh, but I ended up with broken routes. The fix seems to be to add all the necessary permutations of subdirectory routes to the routes.rb file. This of course leads to a fate potentially worse than the basic flat directory. Am I missing something easier and more generic to accommodate the routing for ''tree'' directories.? Thanks. Bill
Check that you have done the following (using admin/ products_controller.rb as an example): # 1. Namespace your routes in routes.rb map.namespace :admin do |admin| admin.resources :products admin.resources :orders # add other resources here end # 2. Namespace your controllers class Admin::Products < ApplicationController end HTH, Nicholas On Jun 14, 5:37 pm, zambezi <b.but...-GrTI0ftTvuWGJGYlWa3Ukdi2O/JbrIOy@public.gmane.org> wrote:> Greetings folks, > > I''m looking for some confirmation before I go further astray. > > I decided to anticipate future growth and rather than use a flat > controller directory (app/controllers ) without subfolders , I would > try a ''tree'' structure with subfolders (app/controllers/admin, app/ > controllers/info, etc.). > > Duh, but I ended up with broken routes. The fix seems to be to add > all the necessary permutations of subdirectory routes to the routes.rb > file. This of course leads to a fate potentially worse than the basic > flat directory. > > Am I missing something easier and more generic to accommodate the > routing for ''tree'' directories.? > > Thanks. Bill
This can be done like ./script/generate controller Admin::Products and the rest as Nicholas Henry ponted Sijo -- Posted via http://www.ruby-forum.com/.
Thanks to Nicholas Henry and Sijo Kg for responding.
Having to add the routes to the routes.rb file still seems a
cumbersome approach, but so be it. Unfortunately it isn''t working as
I raise a Routing Error ( No route matches "/link" with
{:method=>:get} ) with the following configuration
----------------
ActionController::Routing::Routes.draw do |map|
map.namespace :info do |info|
info.resources :citation
info.resources :download
info.resources :link
info.resources :recommendation
end
# Install the default routes as the lowest priority.
map.connect '':controller/:action/:id''
map.connect '':controller/:action/:id.:format''
end
-----------
class Info::LinkController < ApplicationController
def index
@title = "LINKS"
end
end
---------
<li><%= link_to "Links", {:controller
=>''link'', :action =>''index'' }
%></li>
---------
Well there''s one benefit of having it defined in the routes.rb now --
you have nice helper methods for the URL''s :-)
Some suggests:
# Pluralize your routes
----------------
ActionController::Routing::Routes.draw do |map|
map.namespace :info do |info|
info.resources :citations
info.resources :downloads
info.resources :links
info.resources :recommendations
end
# Install the default routes as the lowest priority.
map.connect '':controller/:action/:id''
map.connect '':controller/:action/:id.:format''
end
-----------
# Pluralize your controller
class Info::LinksController < ApplicationController
def index
@title = "LINKS"
end
end
# Use a helper method for the url
---------
<li><%= link_to "Links", info_links_path %></li>
---------
You can see what routes have been defined by executing the following
rake command in your application:
$ rake routes
May I suggest you read up on Restful routing on the Rails Guide
(free):
http://guides.rails.info/routing.html#restful-routing-the-rails-default
Peepcode also has a great screencast on the subject (not free):
http://peepcode.com/products/rest-for-rails-2
Cheers!
Nicholas
On Jun 15, 6:47 pm, zambezi
<b.but...-GrTI0ftTvuWGJGYlWa3Ukdi2O/JbrIOy@public.gmane.org>
wrote:> Thanks to Nicholas Henry and Sijo Kg for responding.
>
> Having to add the routes to the routes.rb file still seems a
> cumbersome approach, but so be it. Unfortunately it isn''t working
as
> I raise a Routing Error ( No route matches "/link" with
> {:method=>:get} ) with the following configuration
>
> ----------------
> ActionController::Routing::Routes.draw do |map|
> map.namespace :info do |info|
> info.resources :citation
> info.resources :download
> info.resources :link
> info.resources :recommendation
> end
> # Install the default routes as the lowest priority.
> map.connect '':controller/:action/:id''
> map.connect '':controller/:action/:id.:format''
> end
>
> -----------
> class Info::LinkController < ApplicationController
> def index
> @title = "LINKS"
> end
> end
> ---------
> <li><%= link_to "Links", {:controller
=>''link'', :action =>''index'' }
> %></li>
> ---------
Hi zambezi
When create a controller do like
./script/generate controller Admin::Links
Note : plural for controller
If you are scaffolding it will be
./script/generate scaffold Admin::Link
Note: It is singular
And if generate model then
./script/generate model Admin::Link
Note: Here also singular
And now change the routes
Sijo
--
Posted via http://www.ruby-forum.com/.
You don''t need to namespace the model as well. ./script/generate model Admin::Link (not necessary) ./script/generate model Link On Jun 15, 11:49 pm, Sijo Kg <rails-mailing-l...-ARtvInVfO7ksV2N9l4h3zg@public.gmane.org> wrote:> Hi zambezi > When create a controller do like > ./script/generate controller Admin::Links > > Note : plural for controller > > If you are scaffolding it will be > ./script/generate scaffold Admin::Link > Note: It is singular > > And if generate model then > ./script/generate model Admin::Link > > Note: Here also singular > And now change the routes > Sijo > -- > Posted viahttp://www.ruby-forum.com/.
And if model is also namespaced the table will be admin_links When do ./script/generate scaffold Admin::Link happens this Sijo -- Posted via http://www.ruby-forum.com/.
Another thing to add to this is Now in the model Admin::Link < ActiveRecord::Base have to say like set_table_name :admin_links Then we can access it like Admin::Link.find(:all) etc Sijo -- Posted via http://www.ruby-forum.com/.
Thank you Sijo and Nicholas,
Your much appreciated replies have given me some insight and got me
moving again. The RESTful reading recommendation (RailsGuide) is
excellent and has shed considerable light on what was a murky subject
for me.
However, one further question regarding the link_to helper.
Since Rails conserves paths (and breaks routes when mapping
namespaces), I amended the old style link_to method by adding a
forward slash in front of the controller name (''home'' to
''/home'').
<%= link_to "Home", {:controller =>''/home'',
:action =>''index'' } %>
How do I achieve this using the new, improved RESTful helper style?
Cheers, Bill
I would avoid ever using a hash to specify a path. Always use named routes. If this is your root of your application then try this: # use root_path in your views map.root :controller => "home" # :action => "index" is implied or if not, then create a named route # use home_path in your views map.home ''home'', :controller => "home" # again :action => "index" is implied At the end of the day you should remove the following from your routes file: map.connect '':controller/:action/:id'' map.connect '':controller/:action/:id.:format'' So you never rely on the :controller/:action has in your views. Always use named_routes. HTH, Nicholas On Wed, Jun 17, 2009 at 1:45 PM, zambezi<b.butler-GrTI0ftTvuWGJGYlWa3Ukdi2O/JbrIOy@public.gmane.org> wrote:> > Thank you Sijo and Nicholas, > > Your much appreciated replies have given me some insight and got me > moving again. The RESTful reading recommendation (RailsGuide) is > excellent and has shed considerable light on what was a murky subject > for me. > > However, one further question regarding the link_to helper. > > Since Rails conserves paths (and breaks routes when mapping > namespaces), I amended the old style link_to method by adding a > forward slash in front of the controller name (''home'' to ''/home''). > > <%= link_to "Home", {:controller =>''/home'', :action =>''index'' } %> > > How do I achieve this using the new, improved RESTful helper style? > > Cheers, Bill > > >