11

假设我有以下课程:

class User < ActiveRecord::Base
  def fullname
    "#{self.first_name} #{self.last_name}"
  end
end

我是否可以进入控制台并以某种方式在控制台中查看全名方法的源代码输出?就像,它看起来像......

irb(main):010:0> omg_console_you_are_awesome_show_source(User.fullname)
[Fri Jun 29 14:11:31 -0400 2012] => def fullname
[Fri Jun 29 14:11:31 -0400 2012] =>   "#{self.first_name} #{self.last_name}"
[Fri Jun 29 14:11:31 -0400 2012] => end

或者真的有什么方法可以查看源代码?谢谢!

4

2 回答 2

27

您也可以使用类似于类固醇上的 IRB 的pry (http://pry.github.com/ )。您可以执行以下操作:

[1] pry(main)> show-source Array#each

From: array.c in Ruby Core (C Method):
Number of lines: 11
Owner: Array
Visibility: public

VALUE
rb_ary_each(VALUE ary)
{
    long i;

    RETURN_ENUMERATOR(ary, 0, 0);
    for (i=0; i<RARRAY_LEN(ary); i++) {
    rb_yield(RARRAY_PTR(ary)[i]);
    }
    return ary;
}
[2] pry(main)> show-doc Array#each

From: array.c in Ruby Core (C Method):
Number of lines: 11
Owner: Array
Visibility: public
Signature: each()

Calls block once for each element in self, passing that
element as a parameter.

If no block is given, an enumerator is returned instead.

   a = [ "a", "b", "c" ]
   a.each {|x| print x, " -- " }

produces:

   a -- b -- c --
于 2012-06-29T19:07:00.207 回答
3

不完全是您要问的,但这个Railscast可能会有所帮助。

它教你一个技巧,可以让你从 Rails 控制台在文本编辑器中打开方法。

更新:

我刚刚意识到链接在付费墙后面......这是技巧的摘要。

将此添加到您的 ~/.irbrc 文件中

class Object
  def mate(method_name)
    file, line = method(method_name).source_location
    `mate '#{file}' -l #{line}`
  end
end

...其中 mate 是打开 TextMate 的 CLI 命令(当然 subl 可以在这里用于 Sublime Text)。

然后在控制台中简单地调用

helper.mate(:number_to_currency)

...其中 number_to_currency 是您要查看的来源的方法。

顺便说一句,如果你还没有,你应该订阅Railscast Pro。IMO,没有比每月花 9 美元更好的方法了。并且要透露,除了成为满意的客户之外,我与该网站没有任何关系。

于 2012-06-29T18:32:46.970 回答