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.