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は、表示するソースのメソッドです。

ところで、まだ登録していない場合は、RailscastProに登録する必要があります。IMO、月額9ドルを使うより良い方法はありません。そして、開示するために、私はそのサイトとは関係がなく、それ以外は満足している顧客です。

于 2012-06-29T18:32:46.970 に答える