Noob help with routing

Hi all,
I am trying to create my own plugin, and I’m not having much luck. I
have
my structure set up with my controller, models and views. I’ve been
able to
successfully migrate my database, however I can’t get my routes to work.
I
have the following basic directory structure

plugins
± project_ranking
±controllers
| ±project_rank_controller.rb
+models
| ±project_rank.rb
+views
| ±order.rhtml
+routes.rb

I’m trying to create a new route, and here is what I’ve defined in my
routes.rb file.

ActionController::Routing::Routes.draw do |map|

connect ‘projects/order’, :controller => ‘project_rank`’, :action =>
‘order’

end

Here is what I’ve added to the base project’s routes.rb

map.home ‘’, :controller => ‘welcome’

#my new routing
map.from_plugin :project_ranking

Other routes

However, when I try to load the default projects page (not a plugin). I
receive the following routing errors

“no route found to match “/” with {:method=>:get}”

If I comment out my map.from_plugin, everything works fine again.

Any advice/help would be great.

Thanks,
Todd

The routes.rb file in your plugin should only contain the inner
section of a normal application routes.rb file, I.e.

connect ‘/path/:parameters’, :controller => ‘plugin_controller’

Note that it doesn’t even contain the ‘map’.

HTH

James

Thanks James! That fixed part of my problem. I’m successfully getting
my
routes to work now. However, it seems that my controller is never
called,
and I’m now receiving a 404 error instead of the apps layout with
“hello!”
in the body as I expected. The application I’m creating a plugin for is
redmine. It uses site layouts and the standard “<%= yield %>” code for
the
body that is rendered from the called controller/action/view. I simply
have
the following in my controller,and view, am I missing something else? I
set
the order action to be called when the projects/order url is called.

routes.rb

connect ‘projects/order’, :controller => ‘project_rank’, :action =>
‘order’

project_rank_controller.rb

class ProjectRankController < ProjectsController
def order
print ‘foobar’;
end
end

order.rhtml

hello!

Thanks,
Todd

I think you could extend ProjectsController - but it would mean that
your ProjectRankController is a ProjectsController. So, for example,
I am not sure it would automatically know about your project_rank
model - it might just know about the project model.

Quoting Todd N. [email protected]:

Well, just a follow up. I fixed my issue by extending
“ApplicationController”. When I extend “ProjectsController” which is
part
of the base app, everything blows up. Are we not allowed to extend code
from the base app in rails engine?

Todd

Hi Cynthia,
I tried changing my controller to the following.

require_dependency “projects_controller”

class ProjectRankController < ProjectsController
layout ‘base’
#require a manager to update priorities
before_filter :require_manager, :only => :update
before_filter :authorize, :except => :order

end

However when I try my overridden “list” action, it doesn’t work with the
projects controller routes. The default is “projects/list”, but my list
action never gets called. If my Project Rank Controller is a Project
controller, do I still have to change the routes to call my subclass?

Thanks,
Todd