Joe*_*air 15 ruby ruby-on-rails
我有一个在activeRecord类上的ruby方法(停用!).但是,我似乎无法找到声明该方法的位置.
这个项目有很多开发人员,所以它可以在任何地方.有一个停用!在一个不相关的类上,但它似乎没有被调用.
任何想法如何找到一个instace的所有超类,或在哪里找到停用的代码!?
Mar*_*une 17
第一个问题是:它是一个实际的方法吗?会obj.method(:deactivate!)引发错误吗?
如果没有,那么你可以使用Method#source_location(仅在Ruby 1.9中,并且backports不能支持它):
obj.method(:deactivate!).source_location
Run Code Online (Sandbox Code Playgroud)
如果确实提高了NoMethodError,则通过method_missing.这使得很难跟踪.如果它接受参数,我会尝试发送错误的类型并使用引发的异常的回溯.
你在用state_machine吗?如果调用了事件转换:deactivate,则模型将#deactivate!自动创建方法.
mck*_*eed 15
当我需要找到在某个类上声明方法的位置时,请说"模型",我这样做
Model.ancestors.find {|c| c.instance_methods(false).include? :deactivate! }
Run Code Online (Sandbox Code Playgroud)
这将按照ruby为具有该方法的第一个顺序搜索祖先树,该方法instance_methods(false)仅包含非继承方法.
注意:在ruby 1.9之前,这些方法被列为字符串而不是符号,所以它会是
Model.ancestors.find {|c| c.instance_methods(false).include?('deactivate!') }
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
3965 次 |
| 最近记录: |