Rails: find controller for a path no comments

Posted by stephane Sun, 06 Apr 2008 12:20:00 GMT

Huh, seems simple to do :p, but I’ve been seeking for a while to find the answer and dig into rails code to find a simple method to retrieve the controller of a given path (could be useful to build a navigation). There it is:

ActionController::Routing::Routes.recognize_path(path)[:controller]

How to create a plugin no comments

Posted by stephane Fri, 13 Apr 2007 08:44:00 GMT

Create a plugin on rails is the best way to share a features or a code between applications and with others. I found a lot information about how to extend or mixin ActiveRecord, but no information about how to provide a piece of application. Maybe I do wrong but that’s how I did:

The more completed information is on Rick Olson blog, not in the plugin initialization :), but in the initialization process part I. The installation process has changed with Rails 1.2.

The work with model can be simple, you can put a require in your init.rb and your model will be available for the application.

In my case I need to make available a whole piece of application with models, views and controller. the way to do (from techno weenie):

for your model :

    models_path = File.join(directory, 'app', 'models')
    $LOAD_PATH << models_path
    Dependencies.load_paths << models_path

for the controllers it’s quite the same:

    controller_path = File.join(directory, 'app', 'controllers')
    $LOAD_PATH << controller_path
    Dependencies.load_paths << controller_path
    config.controller_paths << controller_path

It’s very important to register controllers this way, else they will not be recognized for routing.

And finally to include views, you should integrate in your controller:

    self.template_root = File.join(File.dirname(__FILE__), '..', 'views')

to make views available for your controller.

Once you have that, your application plugin is ready to be used in another application.

Now, I have many questions:

  • Is it the good way to share a piece of application?
  • How standardize the way of communicate between application and plugin ?
  • In the same topic, I have 2 parts in the plugin, one for admin and one for front user, How should I do to easily provide a plugin knowing every application have a different way to authorize or authenticate users?

Please feel free to share any knowledge on these subjects :)

I will update this post later because have some other steps to include like migration and dispatching.