Qué action llega al model?

Hola, hay alguna manera de saber en el model el action o controller que
llega? Gracias

  ______________________________________________

Enviado desde Correo Yahoo! La bandeja de entrada más inteligente.

Hola,

Hola, hay alguna manera de saber en el model el action o controller que llega? Gracias

No… no la hay. En el patrón MVC, cada una de las capas está separada y,
en principio, no debería de saber nada del resto de capas a no ser que
le pases los parámetros de forma explícita. Con esto consigues hacer
código más modular.

En la práctica, hay ciertas fronteras entre las capas que el framework
es capaz de hacer más fáciles, sin romper la separación entre las capas.
Por ejemplo, en el caso de las vistas, además de pasar como parámetros a
la vista las variables de instancia, Rails automáticamente les pasa
variables especiales como la variable params. Esto lo hace Rails porque
al ser el mismo framework el que construye el objeto de la vista al
efectuarse el render, tiene el control y puede aprovechar para
inicializar los parámetros que le interesen en ese punto, ahorrándote a
ti el trabajo de pasarle los parámetros.

El caso del modelo es diferente. El modelo no se crea automáticamente al
hacer un render, sino que tu aplicación decide cómo utilizar los métodos
del modelo. De hecho, muchos de los métodos que usas (find, por ejemplo)
ni siquiera son métodos de instancia, sino que son métodos de la clase
misma. Todo esto hace que no haya una buena solución genérica que Rails
pueda implementar para que los modelos sepan desde qué acción se les
está llamando.

Siempre podrías crearte una variable de clase en algún sitio
(ActionController::Base, por ejemplo) e inicializarla en un before
filter en cada acción para luego consultarla desde el modelo, pero en
ese caso estarías cayendo en un nivel de acoplamiento muy parecido al
que se da cuando se usan variables globales, y ya sabemos que las
variables globales como normal general no son buena idea.

Para mí, y como caso general, si un método de tu modelo necesita saber
desde qué acción se le está llamando, lo más razonable sería pasarle esa
información en el momento mismo de la llamada al método desde el
controlador.

Saludos,


javier ramírez

…i do ruby on rails development in madrid, spain, at
http://www.aspgems.com
…you can find out more about me on http://formatinternet.wordpress.com
and http://workingwithrails.com/person/5987-javier-ramirez

On Mon, Jul 21, 2008 at 6:19 PM, Miguel Angel Calleja Lÿffffe1zaro
[email protected] wrote:

Hola, hay alguna manera de saber en el model el action o controller que llega?

Con un before_filter [1], en el apartado Filter Types puedes ver un
ejemplo donde se captura el controlador. Luego supongo que es cuestión
de obtener el controller_name() o quizá con la clase ya puedes
discriminar.

http://api.rubyonrails.org/classes/ActionController/Filters/ClassMethods.html

Hola a todos,

Hace tiempo empecé a desarrollar una aplicacion en 2.0, pero ahora al
ver las mejoras que implementa la version 2.1 para manejar fechas en
UTC me animá a cambiar. Ya tengo mi sistema debian, actualizado a rails
2.1. pero no me aparecen en el rake los nuevos comandos para manejar las
Time.zone, se han mantenido los comandos de la version 2.0.

Por otro lado al crear una nueva aplicación si que me muestran las
nuevas tareas, relacionadas con el Time.zone

¿La migración se ha quedado a medias?, ¿Como puedo hacer para poder
utilizarlas en el antiguo entorno?

Un saludo y gracias por adelantado
Ricardo

Hola Dani, gracias por contestar, lo he probado y no ha funcionado,
pero lo ha arreglado de la siguiente forma, partiendo un sistema con
rails 2.1.

rm -r vendor/rails

rake rails:update

y con eso me funcionó.

Un saludo
Ricardo

Dani D. escribió:

On Tue, Jul 22, 2008 at 12:34 PM, Ricardo [email protected]
wrote:

Hola a todos,

Hace tiempo empecé a desarrollar una aplicacion en 2.0, pero ahora al
ver las mejoras que implementa la version 2.1 para manejar fechas en
UTC me animá a cambiar. Ya tengo mi sistema debian, actualizado a rails
2.1. pero no me aparecen en el rake los nuevos comandos para manejar las
Time.zone, se han mantenido los comandos de la version 2.0.

Has disparado las rake tasks de actualización dentro de tu proyecto?
Puedes ver una descripción de las tareas rake de actualización
existentes con:

$ rake -D update