2012-04-25 89 views
2

有沒有辦法從Ruby/Ruby on Rails中的方法中找到方法?Ruby/Rails - 從哪裏來的方法被包括在內?

例如,從搜索Rails API我知道:

  • link_to來自ActionView::Helpers::UrlHelper,和來自ActionView::Helpers::TextHelper

  • pluralize但是有沒有找出在Ruby中的方式本身?即在irb或Rails控制檯中?

  • +1

    您可能也想閱讀本文:http://stackoverflow.com/questions/3393096/how-can-i-get-source-code-of-a-methods-dynamically-and-also-which-file -is-this-m – Casper 2012-04-25 22:50:06

    +1

    而這個:http://stackoverflow.com/questions/175655/how-to-find-where-a-method-is-defined-at-runtime – Casper 2012-04-25 22:51:28

    回答

    1

    你在你不管上下文可以通過使用獲得的源位置:

    obj.method(:method).source_location 
    

    它不會放棄你正是你想要的,但Rails核心開發人員對正確命名空間的事情很好。下面的例子可以從軌控制檯上運行:

    Time.method(:zone).source_location 
    
    ["/Users/pete/.rvm/gems/[email protected]/gems/activesupport-3.2.3/lib/active_support/core_ext/time/zones.rb", 9] 
    

    然後你可以去Rails source和搜索該文件。提示:在Github上輸入't'並開始輸入。它會帶你到that file,你可以看到它直接在Time類上定義。

    3

    是:

    @object.method(:method_name) 
    

    例如:

    @object.method(:pluralize) 
    
    +0

    '@s =「error」;不過,@ s.pluralize(:method_name)'不會給'ActionView :: Helpers :: TextHelper'。我誤解了嗎? – mjeppesen 2012-04-25 22:31:08

    +0

    @MatthewJeppesen嘗試'@ s.method(:pluralize)':) – Casper 2012-04-25 22:36:13

    +0

    '@ s.method(:pluralize)' '#=>#<方法:String#pluralize>'... – mjeppesen 2012-04-25 22:38:06