相关疑难解决方法(0)

从类对象获取类位置

我有一堆代码要看,现在是调试时间.由于我从未成为Ruby调试器的粉丝,因此我正在寻找一种通过代码并阅读它的方法.

我想要做的是获取定义加载类的文件的位置:

Foo::Bar.create(:param) # how can I know file location in runtime?
Run Code Online (Sandbox Code Playgroud)

对于规模较小,组织较好的项目,我只会搜索,class Bar但这里不可能,因为有很多类命名Bar,更糟糕的是,其中一些属于同一名称空间.我知道,等待发生的麻烦.

注意:我使用的是Ruby 1.8.7.

ruby

37
推荐指数
3
解决办法
2万
查看次数

你如何检测Ruby中的猴子补丁?

你如何检查已经对Ruby中的特定类进行了猴子修补?如果可能的话,是否也可以获得已修补的属性的先前实现?

ruby metaprogramming

8
推荐指数
2
解决办法
747
查看次数

如何找出拦截'method_missing'的内容

使用Ruby 1.8.6/Rails 2.3.2

我注意到在我的任何ActiveRecord模型类上调用的任何方法都返回nil而不是NoMethodError.除了恼人的,这是打破了动态查找器(find_by_name,find_by_id,等),因为他们总是返回nil即使记录存在.不从ActiveRecord :: Base派生的标准类不受影响.

有没有办法在ActiveRecord :: Base之前跟踪什么是拦截method_missing?

更新:

切换到1.8.7后,我发现(感谢@MichaelKohl)will_paginate插件首先处理method_missing.但是will_paginate在我们的系统中已经存在了很长一段时间(并且没有改变),罪魁祸首必须是后来的链接.任何想法如何看到这个链中的下一步?

更新:

事实证明,有一个gem(annotate-2.4.0)是猴子修补ActiveRecord::Base#method_missing作为一个空白的方法.卸载gem解决了我的问题.虽然没有给出的答案实际上找到了问题,但@Yanhao的答案最接近,因为它只需要一个小调整来发现有问题的别名方法

ruby ruby-on-rails

5
推荐指数
1
解决办法
796
查看次数

查看irb中定义符号的位置

我正在开展一个非常大的铁路项目.有时我需要寻找类/常量定义.Ruby中有一些内置的方法可以帮我吗?例:

irb> SOME_CONSTANT.__file__
=> /some/path/to/a/file
Run Code Online (Sandbox Code Playgroud)

ruby ruby-on-rails irb

5
推荐指数
1
解决办法
646
查看次数

方法'is_admin'在哪里?在我的Rails应用程序中定义?

我有一些调用的代码

current_user.is_admin?
Run Code Online (Sandbox Code Playgroud)

代码工作正常,但我无法弄清楚is_admin?方法的定义.我正在使用Devise,CanCan和role_model,但该方法不在任何这些项目的源代码中,或者在我的...

我还尝试通过在Rails控制台中执行此操作来查找方法的所有者:

current_user.method(:is_admin?).owner
=> #<Module:0x00000105253c98>
Run Code Online (Sandbox Code Playgroud)

但这没什么帮助......

ruby ruby-on-rails

5
推荐指数
1
解决办法
224
查看次数

如何以编程方式确定哪个类/模块定义了被调用的方法?

在Ruby中,我如何以编程方式确定哪个类/模块定义了被调用的方法?

在我调用的给定范围内说some_method().在同一范围内,我想调用一个函数find_method(:some_method),将返回其类,单例类或模块定义some_method.

这里有一些代码来说明我的意思:

class Foo
  include ...

  def bar
    ...
    some_method() # calls a method in scope, assume it exists

    find_method(:some_method) # Returns where the method is defined
                              # e.g. => SomeClassOrModule
    ...
  end
end
Run Code Online (Sandbox Code Playgroud)

我猜我不得不使用的反射功能,从复杂的混合物self,用self.ancestors走了继承树,使用method_defined?检查的方法在类或模块,并且可能是一些其他技巧来检查从范围界定最里面到最外层(因为代码可以在例如a内运行instance_eval).

我只是不知道正确的顺序和Ruby的元模型的所有细微之处来实现find_method,使得它在其搜索既详尽和正确的方法分派分辨率的观点.

谢谢!

ruby methods metaprogramming dispatch

4
推荐指数
1
解决办法
525
查看次数

Ruby错误 - 参数数量错误

我正在学习来自java的ruby dev,我不明白为什么我会得到以下错误.@test是一个类变量,所以我应该能够输出它?

C:/Projects/RubyPlayground/Tester.rb:6:in `test': wrong number of arguments (ArgumentError)
    from C:/Projects/RubyPlayground/Tester.rb:6:in `testMethod'
    from C:/Projects/RubyPlayground/Tester.rb:10
Run Code Online (Sandbox Code Playgroud)

资源:

class Tester

  @test = "here"

  def testMethod()
    puts test
  end

  s = Tester.new()
  s.testMethod()

end
Run Code Online (Sandbox Code Playgroud)

ruby

0
推荐指数
1
解决办法
1180
查看次数

标签 统计

ruby ×7

ruby-on-rails ×3

metaprogramming ×2

dispatch ×1

irb ×1

methods ×1