我对使用动态添加方法到我的Ruby类的模块有很多乐趣。
我使用include语法将这些内容带入我的类中,一切都按预期工作。
但是,我注意到当我使用诸如Authlogic或Paperclip之类的gem时,不需要显式导入。我可以简单地在我的ActiveRecord派生模型上发出acts_as_authentic或has_attached_file,类方法自动在范围内并调用来装饰我的类。
这里发生了什么?是否包含在Gemfile中将所有类方法隐式放在范围内?
我想写一个Gem以同样的方式行事。
编辑 - 这篇文章http://yehudakatz.com/2009/11/12/better-ruby-idioms/表明正在使用include增强ActiveRecord :: Base。这是发生了什么事吗?
答案 0 :(得分:3)
最好的答案是代码本身。
Rails插件通常使用Rails::Railtie
(这里是Paperclip example)来向Rails添加功能。
正如您从Paperclip::Railtie
文件中看到的那样,Paperclip扩展了ActiveRecord::Base
,包括一些自定义模块。在这种情况下,Paperclip::Glue
是提供has_attached_file
宏的方法,以及其他几种方法。
ActiveRecord::Base.send(:include, Paperclip::Glue)
答案 1 :(得分:0)
只要应用程序的gemfile中需要gem,Rails 3将在应用程序启动时加载所有依赖项。