3

クラス メソッドを共有する必要がある複数の Active Record データ モデルが Ruby on Rails にあります。すべてのクラスでメソッドを簡単に宣言できますが、それは DRY の原則に反します。

モジュールを宣言し、「インクルード」を使用してコードをミックスインする方法を見てきましたが、それはクラス メソッドではなくインスタンス メソッドでのみ機能するようです。

Ruby/Rails でこれを行うための推奨される方法は何ですか? (ベースの ActiveRecord クラスを作成して継承しようとしましたが、ActiveRecord はびっくりしました)。

4

2 に答える 2

3

ClassMethods イディオムは、モジュールがクラス メソッドとインスタンス メソッドの両方を提供する一般的な方法です: http://railstips.org/blog/archives/2009/05/15/include-vs-extend-in-ruby/

抽象基本クラスを作成しても、そのクラスで呼び出す限り、ActiveRecord が異常を起こすことはありませんself.abstract_class = true: http://api.rubyonrails.org/classes/ActiveRecord/Inheritance/ClassMethods.html

于 2012-04-14T15:39:18.313 に答える
2

extendモジュールの代わりに使用includeします。インスタンスメソッドの代わりにクラスメソッドが混在します。

または、ベースモデルを絶対ActiveRecord::Baseに継承し、このベースからすべての通常のモデルを継承することもできます。ActiveRecordはびっくりするべきではありません。

于 2012-04-14T15:31:11.903 に答える