Llamar a un metodo de otro controller

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:


Edgar González González
E-mail: [email protected]
http://edgar.gonzalez.net.ve
http://www.hasmanydevelopers.com
http://www.rubycorner.com
http://www.to2blogs.com
http://www.lacaraoscura.com

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