在Rails中,让Gem将其所有方法扩展到应用程序控制器,这是一个好习惯吗?

时间:2010-10-25 13:02:35

标签: ruby-on-rails rubygems ruby-on-rails-plugins

通常的做法是将Gem的所有方法扩展到Rails中的应用程序控制器吗?

因为似乎Facebook的宝石不是那样,并且无法确定该方法是来自facebooker gem还是来自我们的内部代码。

因此,当我们需要升级到Facebooker2时,很难找到实际上是Facebooker gem方法的所有方法,因为方法名称没有grep的命名约定。

这是常见做法吗?如果代码总是使用

fbker = Facebooker.new
fbker.do_something

Facebooker::clear_fb_cookies

对于相关代码来说,grep会更容易。但是,gem的常见做法是将其所有方法都作为应用程序控制器的一部分吗?

1 个答案:

答案 0 :(得分:2)

这不常见,而且称为猴子修补。

首先,您不希望宝石猴子自动修补您的代码。这使得很难预测自己的代码行为。如果你需要像String这样的猴子补丁,那么就应该以不会改变功能的方式进行修改。只添加不会产生冲突或以其他方式阻碍的新内容。

其次,如果要在自己的类或模块中包含方法,则应明确必须包含它们。 E.g:

class MyClass
   include Facebook::AwesomeMethods
end

当您查看代码时,知道还包含其他一些方法。