invoking methods

hi everyone,

i got a simple question that's bothering me all day: is it possible to find out which method and controller did the original call?

to make this a little clearer, I want to do the following: (let's say these two methods are in different controllers)

def first_method   say_my_name end

def say_my_name   # how do i get the original method and controller   # invoking_method = ?   # invoking_controller =?   puts invoking_method   puts invoking_controller end

any help is appreciated!

hi everyone,

i got a simple question that's bothering me all day: is it possible to find out which method and controller did the original call?

You can screw around with caller but that's not a very clean way to go
about things.

Fred

thanks!

i just needed it for some log-entries anyway. so there is no need to find a cleaner way.

As the OP was speaking of controllers: yes, you can. Check controller_name and action_name.

But then:

to make this a little clearer, I want to do the following: (let's say these two methods are in different controllers)

I see no way to have one controller calling instance methods on another controller. You could achieve this with components, but as the Rails docs state: you shouldn't.

/eno

yes you are right. my example was wrong. actually the second method ain't in an controller, but in an initializer. and what i really wanted to do is log the calling controller_name and method_name. but i wanted to achieve this without having to add more parameters to my method call.

of course i could just say: say_my_name(self.controller_name, self.method_name)

but i'm lazy and i don't want to type "(self.controller_name, self.method_name)" all the time, so i thought tried to find a way to figure out these infos inside the say_my_name-method.

if there ain't anything better than to parse caller, i'm gonna go with that.

actually, never mind.

in my initializer

self.controller_name self.action_name

still return the names of my calling controller and action. guess that was just too easy to do in the first place.