Llamar a un controlador desde otro controlador

Antes que nada quería mandar un saludo a todo el mundo y agradecer de
antemano la ayuda que se aporta mediante estas listas u otros
recursos; puesto que soy nuevo en esto.

Estoy empezando a programar una aplicación en rails después de haber
probado el framework de ruby hace un tiempo desde el lado del
diseñador en un proyecto (es decir, tocando únicamente las vistas) y
habiendo programado previamente solo un poco en C; sin embargo me
gusto bastante la manera de trabajar, el flujo y la filosofía. Como
digo estos días me he ido documentando y empezando a desarrollar mi
pequeño proyecto poco a poco mientras voy aprendiendo.

Voy ahora con el problema que me ha surgido: La aplicación debe crear
una “tarjeta” con información del usuario cuando este se registra de
modo que en el controlador que maneja la creación de usuarios se
encarga de ello. De todas formas tengo un controlador propio para la
tarjeta que he creado mediante el script generador scaffolding. ¿Hay
algun modo de llamar desde el controlador de usuario al controlador de
la tarjeta y colocar alli la creación de esta? El trozo de código que
se encarga de esto podréis verlo mejor en http://tinyurl.com/cr53uo

Si no fuera por la necesidad del sistema de autentificación que he
instalado mediante el plugin “restful authentication” la solución
lógica creo que sería unificar ambos controladores y mantener la
simplicidad de la aplicación. Exactamente mi duda es si pudiera llamar
al controlador de la tarjeta desde el del usuario o si, aunque la
solución no es la más elegante dejarlo tal cual está puesto que
funciona. Querría saber vuestras opiniones.

Muchas gracias.


Carlos Matallín
[email protected]
http://c.matallin.com
+34 607377647

Se me ocurren dos soluciones:
1- colocar la lógica que quieres utilizar en ambos controllers en
Application_controller.rb
2- colocar ese código en un archivo en
------ TuApp/lib/tucodigo.rb -------

Creo que esto lo he visto recomendar antes en la lista, pero ya llegarán
más
comentarios al hilo :slight_smile:

El 13 de abril de 2009 14:10, Carlos Matallín [email protected]
escribió:

La solución de colocar el código en Application_controller.rb la había
barajado pero sigue pareciéndome igual de sucia (o más) que dejar la
creación de las tarjetas en el controlador de usuarios.

De todos modos agradezco un montón las diferentes soluciones que se
puedan aportar y vuestra opinión ya que como digo acabo de empezar en
esto :slight_smile:

2009/4/14 Andrés gutiérrez [email protected]:

pequeño proyecto poco a poco mientras voy aprendiendo.
Si no fuera por la necesidad del sistema de autentificación que he
Carlos Matallín
Ror-es mailing list
[email protected]
http://lists.simplelogica.net/mailman/listinfo/ror-es


Carlos Matallín
[email protected]
http://c.matallin.com
+34 607377647

Al final como lo has resuelto?

A falta de encontrar una mejor solución que me convenza voy a dejarlo
como está ya que funciona; aunque no sea su sitio.

2009/4/14 Francesc E. [email protected]:

De todos modos agradezco un montón las diferentes soluciones que se

Creo que esto lo he visto recomendar antes en la lista, pero ya

Voy ahora con el problema que me ha surgido: La aplicación debe
o que

http://lists.simplelogica.net/mailman/listinfo/ror-es

Ror-es mailing list
[email protected]
http://lists.simplelogica.net/mailman/listinfo/ror-es


Carlos Matallín
[email protected]
http://c.matallin.com
+34 607377647

Muy buenas,

Pienso que lo más lógico es llevar ese código al modelo, es decir, una
vez que el usuario se registre, hacer que automáticamente se cree la
tarjeta.

Class User < AR

after_create :crea_tarjeta

private
def crea_tarjeta
Lo que sea…
end

end

Carlos Matallín escribió:

On Apr 14, 2009, at 5:11 AM, Carlos Matallín wrote:

Al final el código ha quedado de la siguiente manera: del
UsersController borramos cualquier referencia a la creación de
tarjetas y como dices llevamos el código al modelo de usuarios

Ese “create_card” lo puedes meter tambien dentro de un observer.

Hola Juan,

Exactamente era lo que iba buscando; muchísimas gracias por tu
inspiración que junto al siguiente enlace me han ayudado a alcanzar el
propósito que iba persiguiendo, hacerlo a la “rails way” jejeje
http://www.therailsway.com/2006/12/8/idiomatic-ruby

Al final el código ha quedado de la siguiente manera: del
UsersController borramos cualquier referencia a la creación de
tarjetas y como dices llevamos el código al modelo de usuarios

Class User < AR
after_create :create_card

protected
def create_card
Card.create :user_id => id, :title => “Visit card of
#{self.login}”
end
end

Gracias de nuevo y un gran saludo

2009/4/14 Juan José Vidal [email protected]:

 private

como está ya que funciona; aunque no sea su sitio.

barajado pero sigue pareciéndome igual de sucia (o más) que dejar la

Application_controller.rb

Antes que nada quería mandar un saludo a todo el mundo y agradec
gusto bastante la manera de trabajar, el flujo y la filosofía. Como
¿Hay
llamar
+34 607377647

http://lists.simplelogica.net/mailman/listinfo/ror-es


Ror-es mailing list
[email protected]
http://lists.simplelogica.net/mailman/listinfo/ror-es


Carlos Matallín
[email protected]
http://c.matallin.com
+34 607377647

Muy cierto, de ese modo saco del modelo de usuario acciones que no
tienen que ver directamente con él, sino con las tarjetas.

He escrito un artículo acerca del proceso de resolución de la duda,
para que aquellos que se estén iniciando, como yo puedan echarle un
vistazo. http://c.matallin.com/2009/04/the-rails-way/

Muchas gracias y un saludo.

2009/4/14 Francesc E. [email protected]:

[email protected]
http://lists.simplelogica.net/mailman/listinfo/ror-es


Carlos Matallín
[email protected]
http://c.matallin.com
+34 607377647