Saber la accion que se va ejecutar (action_name)


#1

Hola
como es posible saber de antemano que metodo se va a ejecutar al acceder
a un controlador?

necesitaba pasar el nombre de la accion a un filtro antes de que dicha
accion se ejecutase algo como

before_filter do |a|
a.accion( controller_name.action_name )

action_name # controller.action_name

end

def accion( a )
@log = “se ejcuta la accion#{a}”
end

Gracias por la info.
Un saludo


#2

Hola,

como es posible saber de antemano que metodo se va a ejecutar al acceder a un controlador?

params[:action]

saludos,

javier ramirez


#3

params[:action]

si pero no.
con params[:action] o action_name obtienes el nombre del método pero una
vez se halla ejecutado, yo necesitaba saber el nombre del método antes
de que se vaya a ejecutar para poder pasarselo al before_filter

seguiré googleando a ver si encuentro algo.
gracias


#4

Hola,

params[:action]

si pero no.con params[:action] o action_name obtienes el nombre del método pero una
vez se halla ejecutado, yo necesitaba saber el nombre del método antes
de que se vaya a ejecutar para poder pasarselo al before_filter

Precisamente si le pones un before_filter en ese filtro todavía no se ha
ejecutado la acción, y sin embargo tienes disponibles todos los
parámetros que la acción va a recibir, siendo uno de ellos el nombre
mismo de la acción. Así que directamente si en el before_filter accedes
a params[:action] deberías ver el nombre de la acción sin problemas.

Si dentro del before_filter por lo que sea no quieres que la acción se
llegue a ejecutar, puedes interrumpir el flujo normal devolviendo false
o redirigiendo a otro sitio.

saludos,

j


#5

Así que directamente si en el before_filter accedes
a params[:action] deberías ver el nombre de la acción sin problemas.

ok, muchas gracias. tienes razón.

lo que me estaba liando a mi es que le estaba pasando el action_name
como parámetro al before_filter y por eso generaba errores.

gracias de nuevo.
Un saludo


#6

pero si lo tratas de recoger desde el método llamado desde
before_filter, lo puedes recuperar antes de que sea ejecutado:

class FooController < ApplicationController

before_filter :init

def init
puts “init: #{action_name}”
end

def bar
puts “bar”
render(:text => “foo”)
end
end

saludos

aitor escribió: