Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby/21.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails 获取对类的引用以输出调用类的元信息_Ruby On Rails_Ruby_Ruby On Rails 3.2_Metaprogramming - Fatal编程技术网

Ruby on rails 获取对类的引用以输出调用类的元信息

Ruby on rails 获取对类的引用以输出调用类的元信息,ruby-on-rails,ruby,ruby-on-rails-3.2,metaprogramming,Ruby On Rails,Ruby,Ruby On Rails 3.2,Metaprogramming,我正在调试ActiveRecord模型中的一些回调。我希望有一个全局可用的方法,如下所示: logger.info("at end of ITEM calling check_status") 但我希望有一个可以添加到任何模型类的通用版本。我正在考虑在initializers/my_initializer.rb中使用如下方式修补ActiveRecord::Base: class ActiveRecord::Base # this worked def end_log

我正在调试ActiveRecord模型中的一些回调。我希望有一个全局可用的方法,如下所示:

logger.info("at end of ITEM calling check_status")
但我希望有一个可以添加到任何模型类的通用版本。我正在考虑在initializers/my_initializer.rb中使用如下方式修补ActiveRecord::Base:

class ActiveRecord::Base
  # this worked
  def end_log_proof
    logger.info("this should work")
  end


  def end_log(klass)
    logger.info("at end of ( #{klass.name} )")
    logger.info("calling #{klass.__method__}.upcase at file #{klass.__FILE__} line: #{klass.__LINE__}")
  end
end
如果我这样打电话:

class Item < ActiveRecord::Base
  after_save :my_callback

  def my_callback
    end_log_proof # this works
    end_log(self) # ouptuts : "calling MY_CALLBACK at ...."
  end  
第二个失败的原因是:

NoMethodError (undefined method `name' for #<Item:0x007feab6359e38>):

我正在尝试获取调用上下文的引用-我如何才能使其工作?

我认为应该是end_logself.class实际上,不需要传递klass,只需调用self.class.name来代替klass.namethx——这对名称有效,但有没有办法获取调用方法的引用以及调用函数的文件和行引用?