簡體   English   中英

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

[英]Ruby on Rails: how do I find out where a method is called?

我正在快速使用現有的Rails項目,並且想知道模型中的特定屬性(字段)在哪里被修改(ActiveRecord)。 在Java中,我要么在setter上使用Eclipse“find reference”功能,要么在那里設置斷點。 使用ActiveRecord,該屬性甚至沒有列在類文件中! 當然,我可以進行文本搜索並查看數百個結果,但這無法解決使用IDE的問題。 有沒有更好的辦法? 我正在使用RubyMine。

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”給出它的路徑)。

RubyMine有一個像eclipse這樣的查找引用功能。 但是,由於AR使用了大量的元編程,因此導航Rails源代碼並沒有多大幫助。 查看查找結果時,您需要查看使用“發送”的行以及對函數的裸調用。

您需要注意的另一件事是AR在運行時合成代碼; 您正在尋找的方法可能甚至不在源中。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM