0

Ruby クラスにメソッドを動的に追加するモジュールをとても楽しんでいます。

インクルード構文を使用してこれらをクラスに取り入れていますが、すべてが期待どおりに機能しています。

ただし、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 に機能を追加するために使用しますRails::Railtie(これはPaperclip の例です)。

ファイルからわかるように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 に答える