0

我对动态添加方法到我的 Ruby 类的模块很感兴趣。

我正在使用 include 语法将这些带入我的课程,并且一切都按预期工作。

但是,我注意到当我使用 Authlogic 或 Paperclip 等 gem 时,不需要显式导入。我可以简单地在我的 ActiveRecord 派生模型上发出acts_as_authentic 或has_attached_file,并且类方法自动在范围内并被调用来装饰我的类。

这里发生了什么?包含在 Gemfile 中是否将所有类方法隐含在范围内?

我想写一个 Gem 以同样的方式表现。

编辑 - 这篇文章http://yehudakatz.com/2009/11/12/better-ruby-idioms/表明 ActiveRecord::Base 正在通过包含得到增强。这是怎么回事?

4

2 回答 2

3

最好的答案是代码本身。

Rails 插件通常使用Rails::Railtie(这里是Paperclip 示例)向 Rails 添加功能。

Paperclip::Railtie文件中可以看出,Paperclip 扩展ActiveRecord::Base了一些自定义模块。在这种情况下,Paperclip::Glue是提供has_attached_file宏以及其他几种方法的方法。

ActiveRecord::Base.send(:include, Paperclip::Glue)
于 2012-06-27T20:23:06.983 回答
0

只要应用程序的 gemfile 中需要 gem,Rails 3 就会在应用程序启动时加载所有依赖项。

于 2012-06-27T20:24:35.220 回答