Si tengo un método en un controlador diferente al que estoy escribiendo, y quiero llamar a ese método, ¿es posible, o debería considerar mover ese método a un ¿ayudante?Llamar a un método de otro controlador
Respuesta
Podría técnicamente crear una instancia del otro controlador y llamar a métodos sobre eso, pero es tedioso, propenso a errores y altamente no recomendado.
Si esa función es común para ambos controladores, probablemente debería tenerla en ApplicationController
u otro controlador de superclase de su creación.
class ApplicationController < ActionController::Base
def common_to_all_controllers
# some code
end
end
class SuperController < ApplicationController
def common_to_some_controllers
# some other code
end
end
class MyController < SuperController
# has access to common_to_all_controllers and common_to_some_controllers
end
class MyOtherController < ApplicationController
# has access to common_to_all_controllers only
end
Sin embargo, otra manera de hacerlo como jimworm sugirió, es utilizar un módulo para la funcionalidad común.
# lib/common_stuff.rb
module CommonStuff
def common_thing
# code
end
end
# app/controllers/my_controller.rb
require 'common_stuff'
class MyController < ApplicationController
include CommonStuff
# has access to common_thing
end
O incluido en un 'módulo'. – jimworm
'include GoodSuggestion' Gracias @jimworm – edgerunner
¿Creando una instancia del otro controlador ???? Arrrrrrrgggh (de hecho). Otra opción, ya que la pregunta es muy vaga: mueva el código a los modelos. – nathanvda
Try y progresivamente se mueven métodos para sus modelos, si no se aplican a un modelo continuación, un ayudante y si todavía se necesita acceder poner en otro lugar en el ApplicationController
Nunca movería el código de un controlador a un ayudante, sino un módulo que vive en '/ lib'. Solo el código de vista debería vivir en un helper. – nathanvda
poner algo en un ayudante es de corta duración. Llegarás al punto donde no tienes que poner una lib/tirar todo en un módulo tampoco es demasiado bueno. –
Prefiero usar módulos sobre ayudantes, porque son verdaderos OO, puedo incluirlos/extenderlos a voluntad. Puedo agrupar cosas que tienen un significado real. Los ayudantes son solo cubos. Recomiendo usar solo aquellos para los métodos relacionados con la vista. No estoy seguro de lo que quiere decir con 'llegarás al punto ...'. – nathanvda
no lo hago Conozca cualquier detalle de su problema, pero tal vez las vías puedan ser una solución en su caso (especialmente si es una acción RESTANTE).
Si usted requisito tiene que ver con algunas operaciones de base de datos, entonces se puede escribir una función común (método de clase) dentro de ese modelo. Las funciones definidas dentro del modelo son accesibles para todos los controladores. Pero esta solución se aplica a todos los casos.
- 1. Llamar a un método miembro no estático desde otro método
- 2. Llamar a un método cada vez antes de llamar a cualquier otro método
- 3. Llamar a un método en un modelo de controlador
- 4. ¿Podemos llamar al Método de un controlador desde otro controlador en asp.net MVC?
- 5. Cómo llamar a un método de controlador desde Javascript
- 6. ¿Cómo llamar a un método de controlador WebApi?
- 7. Redirigir un controlador a otro Controlador
- 8. llamar a otro método en el principal método en Java
- 9. Cómo llamar un puntero al método desde otro método
- 10. Llamar a un AsyncTask de otro AsyncTask
- 11. Llamar a un controlador de vista padre (a través de un controlador de navegación)
- 12. métodos estáticos Python - cómo llamar a un método de otro método
- 13. En javascript, ¿cómo puedo llamar a un método de prototipo en otro método prototipo?
- 14. Llamar a un método NSTimer
- 15. Android, ¿Cómo llamar a onCreate() explícitamente desde otro método?
- 16. before_filter con otro controlador
- 17. ¿Llamar a un DAO desde otro DAO?
- 18. Llamar a un método en una clase en cada otro método
- 19. ¿Puede un método nativo llamar a un método privado?
- 20. Nodo JS - Llamar a un método desde otro método en el mismo archivo
- 21. ¿Cómo llamar a un método desde otro método en Objective C?
- 22. ¿Cómo llamar a la acción del controlador en otro controlador en cakephp?
- 23. Redirigir a la acción en otro controlador
- 24. Spring MVC, llamando a otro controlador desde Dentro de un controlador
- 25. Llamar a un método asíncrono de un método no asíncrono
- 26. ¿Se puede llamar a un método de otro modelo en un modelo en Code Igniter?
- 27. Redirigir a la acción en otro controlador
- 28. Llamar a un método anulado, superclase a llamadas reemplazadas método
- 29. puedo llamar a un archivo js de otro.
- 30. cómo llamar a un método de una clase de otro dominio de aplicación
¿Podría agregar hechos al problema que desea resolver llamando al método de otro controlador? Actualmente es bastante vago, y la solución dependerá del problema. – mliebelt
De hecho, elabore lo que está tratando de resolver. ¿Qué está haciendo el método compartido? – nathanvda