2009-07-24 18 views
8

Quiero compartir código no relacionado con vistas entre varios controladores en mi aplicación Rails. ¿Dónde en la estructura del directorio debería colocarlo?Dónde colocar el código de Rails que no es un modelo, vista, controlador o ayudante?

EDIT: el código en cuestión si algo usan todos los controladores para determinar cómo que prestan los datos del modelo

+0

no está relacionado con las entidades de la base de datos, tampoco (por lo que no es un código de modelo) –

+1

Los modelos no necesitan estar relacionados con la base de datos. Simplemente representan los datos utilizados por el sistema, independientemente de si están almacenados o no. – Pesto

+0

¿Qué es? Usted solo declara lo que no es, pero no lo que es. – txwikinger

Respuesta

8

Si el código es algo así como módulos con métodos de utilidad en éstos podría ser colocado en la carpeta lib. Alternativamente, podría crear una superclase común para algunos de sus controladores si comparten el comportamiento.

Por favor, publique un ejemplo del tipo de código que está pensando.

0

Personalmente, creo que está bien, si su controlador está relacionado con ponerlo en su directorio de controladores, pero etiquetado como un módulo, p. app/controllers/what_am_i_module.rb ya que es específico de la aplicación en desarrollo.

lib me parece un lugar en el que pondría mejoras de framework/core o parches de mono que no son específicos de la aplicación.

5

Si se trata de "algo que todos los controladores usan", lo ubicaría en una clase base utilizada por todos los controladores. El "application_controller" viene a la mente.

+0

+1 Me suena a application_controller.rb también. – cakeforcerberus

2

He estado creando módulos en lib para proporcionar código a otras clases.

Aquí hay un módulo de ejemplo abreviado que define los valores de las vistas que pueden crearse instancias desde diferentes controladores.

module ControllerDefaultValues 
    def default_value_for_some_controller() 
    @controller_name = "some_controller" 
    end 
end 

Para utilizarlo, sólo incluye el módulo en su clase:

class SearchesController 
    include ControllerDefaultValues 
    # 
    def search_some_controller 
    default_value_for_some_controller() 
    render(:partial => "search_results") 
    end 
end 

La principal ventaja de este método es que mantiene su directorio de controladores se centró en los controladores y el directorio de modelos centra en la lógica.

0

Si va a ser utilizado por todos los controladores, pegarlo en application_controller.rb

Todos los controladores heredan de ApplicationController, por lo que todos vamos a tener acceso a ellos.

Cuestiones relacionadas