hola a todos…
no se si es una locura lo que esty preguntando pero necesito desde un
controller X llamar a un metodo que esta en un controller Y.
Esto lo necesito para no repetir codigo.
Como lo hago? he leido y buscado mucho pero no veo ningun ejemplo por lo
que
seguro no se debe hacer, pero en este caso necesito hacer eso…
Muchas gracias
Una opción serÃa hacerte un módulo con los métodos comunes y luego hacer
el include en los respectivos controladores:
module FooBar
def foobar
render :text => “foobar”
end
end
class FooController < ApplicationController
include FooBar
end
class BarController < ApplicationController
include FooBar
end
Otra opción serÃa añadir esos métodos en application.rb pero asÃ
estarÃan disponibles para TODOS los controladores y otra opción serÃa
hacerte otro controlador con los métodos comunes y que tus controladores
heredasen de éste en lugar de ApplicationController, aunqe habrÃa que
ver el contexto para tomar una decisión.
Por último estarÃa la opción de hacer una llamada por http, pero
entiendo que no es que lo que necesitas en este caso.
Saludos.
Manuel P. escribió:
2008/8/24 Manuel P. [email protected]:
hola a todos…
no se si es una locura lo que esty preguntando pero necesito desde un
controller X llamar a un metodo que esta en un controller Y.
Esto lo necesito para no repetir codigo.
Como lo hago? he leido y buscado mucho pero no veo ningun ejemplo por lo que
seguro no se debe hacer, pero en este caso necesito hacer eso…
Si ese método es tremendamente común entre tus controladores puedes
declararlo en el ApplicationController: como todos los controladores
heredan de esa clase lo tendrás disponible en todos ellos.
Si es un caso muy aislado entonces tienes dos opciones para compartir
ese método
común:- usar herencia[1], haciendo que uno de tus controladores herede del
otro o que ambos hereden de uno común en el que declares ese método
- usar mixins[2], declarando el método en un módulo aparte e
incluyendo ese módulo en ambos controladores.
Yo cuando no lo veo del todo claro suelo decantarme por los mixins, me
parece una forma más flexible de cara a reutilizar el código
común,pero todo depende del caso concreto, del diseño de tu aplicación y de
tu estilo de
programación.
[1] Herencia de clases - Ruby Tutorial
[2] Learn How to Blog and Build Websites for Profit!
Revisa el plugin embedded-actions
desarrollado por Sebastian D.
Salu2
On Mon, Aug 25, 2008 at 7:43 AM, Manuel P.
[email protected] wrote:
On Sun, Aug 24, 2008 at 2:13 PM, Manuel P. <
[email protected]> wrote:
hola a todos…
no se si es una locura lo que esty preguntando pero necesito desde un
controller X llamar a un metodo que esta en un controller Y.
Esto lo necesito para no repetir codigo.
Como lo hago? he leido y buscado mucho pero no veo ningun ejemplo por lo
que seguro no se debe hacer, pero en este caso necesito hacer eso…
Muchas gracias
Una manera muy sucia de hacerlo en la que pierdes incluso el binding
(que
puede que lo necesites), es:
OtroController.new.action
Aunque si necesitas realmente esto, me da por pensar que tienes algún
error
de diseño. Como bien dicen por ahÃ, solo puedes usar la herencia de
clases,
esto es, poner el código en el application.rb