2010-08-19 38 views
6

Necesito llamar a una acción dentro de un controlador de un método dentro de un modelo. Esto es algo que hago mucho en otro idioma (cuando trabajo con el framework MVC), sin embargo, nunca he visto esto hecho en ruby ​​on rails. La acción no representa nada, simplemente actualiza una variable de sesión.Rails Modelo para llamar acción del controlador

Respuesta

5

Eso no es algo que lo haría en el patrón MVC. Su modelo solo debería contener lógica de negocios (y acceso a datos). ¿Puedes proporcionar información sobre a qué intenta llamar y por qué? Por lo general, cuando intentas hacer algo como esto, es un olor que algo no está donde se supone que debe estar.

Esto es por lo general la forma en que lo veo:

  • Modelo - estos son los datos de objetos que también tienen métodos para la lógica de negocio
  • Controller - estas son las acciones tomada por su aplicación, controlan los modelos y les dicen qué hacer, que controlan el fin de decirle qué emiten
  • vista - esto la capa de interfaz, podría estar en cualquier formato (hTML, JS, xml) pero tiene muy poca lógica para que

Si usted está tratando de llamar a algo en un controlador de un modelo, que podría significar que hay demasiada lógica de control en su modelo.

O, tal vez, acaba de obtener un método que se puede utilizar en todas partes (es un método de ayuda, y en realidad no está relacionado con el modelo y su controlador). En este caso, debe colocarlo en su propio módulo en su directorio/lib.

Editar: Sí, las variables de sesión deben probablemente sólo sean tocados/modificada en el controlador. ¿Quizás tienes demasiada lógica de tipo control en tu modelo? Tal vez reconsidere cuán cercanamente se relaciona esa lógica con el Modelo real si es realmente parte de la acción del Controlador.

+0

el problema es que tengo un plugin para la autenticación y tengo que llamar a un método cuando un usuario inicia sesión en medio de una función que me recuerde dentro del plug-in (que byp evalúa todas las acciones del controlador de inicio de sesión; si este no fuera el caso, obviamente cambiaría los datos de la sesión aquí). La necesidad de llamar a un método en el controlador está relacionada con el seguimiento analítico y no es realmente nada que el usuario vea. – scott

0

Si desea llamar a la acción del controlador (o cahange sesión porque session se define como @session variable y que es privado) a partir del modelo que debe pasar a instancia del controlador como un parámetro para el método de modelo por lo que si necesita editar session método puede ser similar a

def change_session(controller) 
    @ses = controller.send :session 
    //some actions 
end 

en el controlador

def something 
    s = Session.new 
    s.change_session(self) 
    ... 
end 
Cuestiones relacionadas