
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.
- 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 - 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: rails, ruby, RubyOnRails
0 Comentarios (Publicar un comentario)