如何获取调用别名方法的名称?

我有一个名为link_to_admin方法,然后我将另一个名为simple_link_to方法别名

 def link_to_admin(name,url,options={}) # My stuff here link_to(name,url,options) end alias_method :simple_link_to, :link_to_admin 

在这里我link_to_admin一个问题,如果我调用link_to_admin ,我想将值打印到

  • 标签中

    防爆。

     def link_to_admin(name,url,options={}) # My stuff here menu = "" menu << "
  • #{link_to(name,url,options)}
  • " menu.html_safe end

    如果我打电话给simple_link_to不需要

  • 标签。 所以目前我正在传递一个像li_required这样的options然后在我的方法中检查条件。 这是完美的,我知道这是正确的方法。

     def link_to_admin(name,url,options={}) menu = "" menu << options[:li_required] ? "
  • #{link_to(name,url,options)}
  • " : link_to(name,url,options) menu.html_safe end

    但是,在我尝试找到像simple_methodlink_to_admin类的调用方法simple_method ,我试过:

     1.__method__ 2.caller[0]=~/`(.*?)'/ 

    这没有按预期工作。

    我在layout调用simple_methodlink_to_admin方法,因此__method__始终只返回link_to_admin

    但是caller[0]=~/ /(。*?)’/ means, it's returning layout path and if I am calling from any other if am calling from布局if am calling from means, it's returning layout path and if I am calling from any other帮助器ormeans, it's returning layout path and if I am calling from any other则意味着它返回当前方法。

    任何其他方式是检查方法名称。

    我知道这不是一个好问题,任何人都可以告诉我任何其他方式。

    注意: – 我只为命名转换创建了alias_method。 除了添加

  • 标签,我没有做任何事情。

    不仅在这里,我还有很长一段时间的怀疑。 我知道我可以再定义一种方法,我可以做到。

    离开我的场景,一般我想知道这个答案。

    使用__callee__而不是__method__将获取正在运行的别名的名称。

    我建议,不要依赖于方法名称和分支(对于任何方法名称重构都会变得很脆弱,显然更复杂,等等),您只需将方法分解为将共同逻辑抽象为共享方法。

    这是我写它的方式:

     def simple_link_to(name, url, options = {}) # shared_link_to(name) ... or whatever link_to(name, url, options) end def link_to_admin(name, url, options = {}) # shared_link_to(name) ... or whatever content_tag(:li) do simple_link_to(name, url, options) end end private def shared_link_to(name) # do whatever is common end 

    注意:我已经猜到你有一些常见的代码,你想要抽象出一些方法(我称之为shared_link_to )……但是你需要用那个部分做你需要的东西。