2010-05-26 11 views
7

algunas preguntas:Pautas para llamar a los métodos del controlador en los módulos auxiliares?

  1. ¿Es posible llamar a un método de controlador en un módulo de ayuda (por ejemplo, el ayudante de la aplicación)?

  2. En caso afirmativo, ¿cómo maneja el ayudante la representación de las vistas? ¿Ignoralo?

  3. ¿En qué casos le gustaría llamar a un método de controlador de un ayudante? ¿Es mala práctica?

  4. ¿Tiene algún código de muestra en el que llame métodos de controlador en helper?

Respuesta

10

Por lo general, no llama a los métodos de controlador de los ayudantes. Es decir: si se refiere a un método que recopila datos y luego representa una vista (cualquier otro método que deba invocarse probablemente no debería estar en un controlador). Definitivamente es una mala práctica y se rompe MVC.

Sin embargo, es perfectamente posible hacer que los métodos de controlador estén disponibles en las vistas, un gran ejemplo es, por ejemplo, el método current_user.

Para hacer un método controlador disponible en los puntos de vista, como un método de ayuda, acaba de hacer

private 

def current_user 
    # do something sensible here 
    @current_user ||= session[:user] 
end 
helper_method :current_user 

Dicho método se define mejor en la sección private, o podría estar disponible como una acción (si un comodín en su enrutamiento).

0

Llamar a un controlador de un ayudante viola el patrón MVC. OMI si necesita llamar a un controlador desde un asistente de vista de Rails (como application_helper), entonces hay algo sobre el diseño que podría mejorarse. La intención es que los ayudantes "ayuden" a las vistas y, por lo tanto, solo hablen con los modelos.

No voy a defender MVC por sí mismo aquí (hay un montón de referencias en la web), pero este SO sobre llamar al controlador desde una vista debería ayudarte a empezar.

Calling controller from view? (tenga en cuenta que este es un hilo de ASP.NET, por lo que solo los principios de alto nivel son relevantes).

+0

el hilo que ha vinculado tiene que ver con ASP.NET por lo que puede no ser de mucha ayuda. –

+0

Vaya. Podría haber jurado que vi una pregunta de Rails relativamente reciente en ese sentido, pero obviamente no es así. Supongo que el punto es que el asistente de visualización realmente debe verse como parte de la vista, y el patrón MVC frunce el ceño al llamar al controlador desde la vista. Googling Rails MVC es un ejercicio que le queda al OP. – Greg

8

declara su métodos en el controlador correspondiente

private 
def method_name1 
... 
end 

def method_name2 
... 
end 

En la cabeza del controlador declarar

helper_method :method_name1, :method_name2 

Es posible que desee declarar esos métodos en estado privado

Y eso es todo, ahora puede usar su método en un helper

Cuestiones relacionadas