Crear controladores y vistas en plugins Ruby on Rails

Uno de los plugins que forman el proyecto meta-rails (http://meta-rails.rubyforge.org)
se encarga de hacer un diagrama de las clases de la aplicación y proporciona un generador
de consultas a estas clases. Para realizar esto necesitaba cargar controladores y sus vistas
directamente desde este plugin.

Después de documentarme y hacer pruebas he encontrado la manera de hacerlo fácil.

  1. Cargar los controladores
    Todos los plugins en ruby on rails pueden tener el archivo init.rb en su carpeta raiz
    que se ejecuta al cargar la aplicación rails. Este archivo es el hook (gancho) que podemos
    utilizar para introducir código del plugin en la aplicación rails.

    Si ponemos nuestros controladores en el subdirectorio del plugin app/controllers, para cargarlos
    podemos utilizar el código siguiente:

    directory = "#{RAILS_ROOT}/vendor/plugins/NOMBRE_DEL_PLUGIN"
    controller_path = File.join(directory, 'app', 'controllers')
    require "#{controller_path}/NOMBRE_DEL_CONTROLADOR.rb"
    $LOAD_PATH << controller_path
    if defined?(RAILS_GEM_VERSION) and RAILS_GEM_VERSION >= '1.2.0'
    Dependencies.load_paths << controller_path
    else
    raise "Engines plugin is needed for running NOMBRE_DEL_PLUGIN with \
    a Ruby on Rails version < 1.2.0" if Dir["#{RAILS_ROOT}/vendor/plugins/engines"].empty?
    end
    config.controller_paths << controller_path


    Analizando el código vemos que este código se ejecuta de manera diferente según utilizemos
    versiones de Ruby on Rails posteriores a 1.2.0 o previas. Esto es porque para que funcione
    en versiones anteriores a 1.2.0 necesitamos el plugin engines instalado (http://rails-engines.org).

    Una vez puesto este código podemos crear nuestros controladores haciendo que hereden de ActionController::Base:

    class MetaQuerierController < ActionController::Base

    def index
    render :text => "Funciona!"
    end

    end

  2. Vistas para nuestros controladores
    Una vez hemos cargado los controladores, tenemos que asignarles los subdirectorios donde pueden
    encontrar sus vistas. Esto lo hacemos con cambiando una variable de clase con self.template_root:

    class MetaQuerierController < ActionController::Base
    self.template_root = "#{RAILS_ROOT}/vendor/plugins/meta_querier/app/views/"
    end


Espero que te sea de utilidad, puedes encontrar más información en:
  • http://weblog.techno-weenie.net/2007/1/24/understanding-the-rails-initialization-process

Etiquetas: , ,


Recommend Me


XING
View Sergio Espeja's profile on LinkedIn