Ruby / Rails——从哪里包含一个方法? [复制]

Posted

技术标签:

【中文标题】Ruby / Rails——从哪里包含一个方法? [复制]【英文标题】:Ruby / Rails -- from where was a method was included? [duplicate] 【发布时间】:2012-05-06 15:56:42 【问题描述】:

有没有办法从 Ruby / Ruby on Rails 中包含方法的位置找出?

例如,通过搜索Rails API我知道:

link_to 来自ActionView::Helpers::UrlHelper,而 pluralize来自ActionView::Helpers::TextHelper

但是有没有办法在 Ruby 本身中找出答案?即 inirb,还是 Rails 控制台?

【问题讨论】:

您可能还想阅读此内容:***.com/questions/3393096/… 还有这个:***.com/questions/175655/… 【参考方案1】:

是的:

@object.method(:method_name)

例如:

@object.method(:pluralize)

【讨论】:

@s = "error"; @s.pluralize(:method_name) 不提供ActionView::Helpers::TextHelper。我误会了吗? @MatthewJeppesen 试试@s.method(:pluralize) :) @s.method(:pluralize) # => #<Method: String#pluralize> ... @MatthewJeppesen 这是正确的结果。 pluralize 是直接添加到String 的方法。你可以看到它的定义here【参考方案2】:

无论您身处何种环境,都可以通过以下方式获取源位置:

obj.method(:method).source_location

它不会给你你想要的东西,但 Rails 核心开发人员擅长正确命名空间。以下示例可以从 rails 控制台运行:

Time.method(:zone).source_location

["/Users/pete/.rvm/gems/ruby-1.9.2-p290@gemset/gems/activesupport-3.2.3/lib/active_support/core_ext/time/zones.rb", 9]

然后您可以转到Rails source 并搜索该文件。提示:在 Github 上输入 't' 并开始输入。它将带您到that file,您可以看到它是直接在 Time 类上定义的。

【讨论】:

以上是关于Ruby / Rails——从哪里包含一个方法? [复制]的主要内容,如果未能解决你的问题,请参考以下文章

在 Ruby on Rails 项目中将“关注点”存储在哪里? (轨道 5.2+)

Ruby/Rails:生成脚手架的代码在哪里

ruby/rails:如何确定是不是包含模块?

Ruby on Rails:以表单提交数组

ruby 内省:如何问ruby 方法定义在哪里? [复制]

Ruby on Rails - 从视图调用控制器方法