Ruby Forum Rails Engines development > Noob help with routing

Posted by Todd Nine (Guest)
on 02.03.2008 22:02
(Received via mailing list)
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
Posted by James Adam (Guest)
on 03.03.2008 01:08
(Received via mailing list)
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
Posted by Todd Nine (Guest)
on 03.03.2008 04:55
(Received via mailing list)
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
Posted by Todd Nine (Guest)
on 05.03.2008 05:10
(Received via mailing list)
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
Posted by Cynthia Kiser (Guest)
on 08.03.2008 19:21
(Received via mailing list)
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 Nine <todd.nine@onwebconsulting.com>:
Posted by Todd Nine (Guest)
on 09.03.2008 21:41
(Received via mailing list)
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