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
on 2008-03-02 22:02
on 2008-03-03 01:08
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
on 2008-03-03 04:55
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
on 2008-03-05 05:10
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
on 2008-03-08 19:21
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>:
on 2008-03-09 21:41
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
Please log in before posting. Registration is free and takes only a minute.
Existing account
(Switch to SSL-encrypted connection)
NEW: Do you have a Google/GoogleMail or Yahoo account? No registration required!
Log in with Google account | Log in with Yahoo account
Log in with Google account | Log in with Yahoo account
No account? Register here.