5

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

4

2 回答 2

10

tl;博士

Kernel.caller

解释

Rails 使用 method_missing 在 ActiveRecord 模型上实现属性方法。您可以在 ActiveRecord::Base 源代码中看到这一点。我为模型类 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”给出了它的路径)。

于 2011-09-30T23:30:38.780 回答
1

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

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

于 2011-09-30T21:39:35.257 回答