2012-04-14 27 views
2

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

私はモジュールを宣言し、 'include'を使ってコードをミックスしてみましたが、クラスメソッドではなくインスタンスメソッドでしか動作しないようです。

これをRuby/Railsで行うにはどうすればよいですか? (私は基本的なActiveRecordクラスを作成しようとしましたが、それから継承していますが、ActiveRecordは機能しません)。

答えて

3

クラスメソッドのイディオムは、両方のクラスとインスタンスメソッドを供給するためのモジュールのための一般的な方法です:あなたは、抽象基本クラスを作成する場合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

+0

ビンゴでテーブル名を宣言する必要があります! self.abstract_class = trueは私が逃したものでした。ありがとう。 –

2

includeの代わりにextendをモジュールに使用してください。それはインスタンスメソッドの代わりにクラスメソッドで混在します。

または基本モデルをActiveRecord::Baseから継承し、すべての通常のモデルをこのベースから継承することができます。 ActiveRecordはフリークアウトしません。

+0

私は仕事を継承することができませんでした。例えば。クラスFoo

+0

これはあなたが必要としている答えだと思います。これはActiveRecordとは関係がありませんが、Rubyはその棚です。一般的なメソッドのためにRubyモジュールを作成し、それらから 'extend'を試してみてください。 – fguillen

+0

Leonard、あなたはクラス – cpuguy83

関連する問題