Ruby on Rails:如何找出调用方法的位置?

时间:2011-09-30 21:30:55

标签: ruby-on-rails debugging rubymine

我正在快速使用现有的Rails项目,并且想知道模型中的特定属性(字段)在哪里被修改(ActiveRecord)。在Java中,我要么在setter上使用Eclipse“find reference”功能,要么在那里设置断点。使用ActiveRecord,该属性甚至没有列在类文件中!当然,我可以进行文本搜索并查看数百个结果,但这无法解决使用IDE的问题。有没有更好的办法?我正在使用RubyMine。

2 个答案:

答案 0 :(得分:8)

TL;博士

Kernel.caller

解释

Rails使用method_missing在ActiveRecord模型上实现属性方法。 You can see that in the ActiveRecord::Base source code.我将为模型类YourModel解决此问题的方式如下:

class YourModel < ActiveRecord::Base
  def myfield=(*args)
    Rails.logger.debug "myfield called at #{Kernel.caller.inspect}"
    super(*args)
  end
end

实际上还有一些其他方式可以更新您的属性,例如update_attribute和friends。如果找不到赋值调用站点,则可以保留覆盖方法,直到找到代码正在使用的方法。或者,您可以在gem的本地副本中更改ActiveRecord :: Base(“bundle show activerecord”给出它的路径)。

答案 1 :(得分:1)

RubyMine有一个像eclipse这样的查找引用功能。但是,由于AR使用了大量的元编程,因此导航Rails源代码并没有多大帮助。查看查找结果时,您需要查看使用“发送”的行以及对函数的裸调用。

您需要注意的另一件事是AR在运行时合成代码;您正在寻找的方法可能甚至不在源中。