理解Ruby on Rails发送(:include

时间:2012-11-23 16:16:15

标签: ruby-on-rails activerecord

我正在尝试开发一个Redmine插件,我开始阅读documentation,并学习了很多Ruby和很多Ruby on Rails。 (我是PHP / Python / js家伙)

然后我开始浏览其他插件,然后找到了this code。我找不到足够的信息来完全理解这行代码的工作原理:

Issue.send(:include, RedmineRequireIssueAllowedToChangeAssignee::Patches::IssuePatch)

我知道在IssuePatch中有一些要覆盖或添加到Issue类的东西。

然后我found this,解释发送的使用,这让我感到困惑,为什么不只使用Issue.include?

主要问题是:这个方法include在哪里定义,它做了什么?

更新:related question

1 个答案:

答案 0 :(得分:7)

您不能只执行include因为它是私有方法,因此您使用send来绕过ruby可见性控制。使用send,您可以调用任何方法,甚至是私有方法(如本例所示)。

  

此方法包括已定义的内容以及它的作用是什么?

它被定义为Module#include,并且当使用模块作为参数调用时,它会将该模块的所有实例方法附加到接收器(在您的情况下为Issue类)。这是Ruby中非常常见的习语。