2012-01-07 10 views
4

私はすべての単一のモデルで使用するいくつかの機能を持っており、ActiveRecord::Baseのようなものに配置したいので、すべてのモデルで同じ機能の名前を付ける必要はありません。モデルのapplication_helperまたはapplication_controllerに類似したものはありますか?

このようなものがベストプラクティスに従っているかどうかはわかりません。おそらく、いくつかのRailsのプロフェッショナルが私に何か良いことを示すかもしれない

答えて

2

Railsで標準のオブジェクト指向のプラクティスを引き続き使用できることに注意してください。 ActiveRecord::Baseに共通するすべての機能を拡張したクラスを作成し、実際のActiveRecordモデルごとにそのクラスを拡張します。

+1

良いOO設計は、クラスが "is a"関係を持っている場合にのみ継承することです。 Rubyの場合、Moduleを作成し、 'include'を使うことをお勧めします。 –

+0

これを示す回答を作成してみませんか?私はモデルに 'include'を使う方法を知らない。 – imjp

3

必要なメソッドを含むモジュールを作成し、必要に応じてinclude MyModuleを書きます。

あなたは確かに@derekerdmannが示唆されているように行うと、モデルの抽象基本クラスを作成することができます。

class MyBaseModel < ActiveRecord::Base 
    abstract_class = true 

    def my_method(*args) 
    #code goes here 
    end 
end 

class MyModel < MyBaseModel 

end 

だけabstract_class = trueラインまたは単一のテーブル継承を想定していることを忘れないでください。

個人的には、あなたのモデルが共通の機能を兼ね備えている場合は、共通の機能を別々のモジュールにグループ化し、必要に応じてincludeをグループ化することができます。

+0

あなたのご意見ありがとうございます。 mixin方法論を使用するにはどうすればいいですか? – imjp

+1

ここにはかなり良い基本的なチュートリアルがあります:http://juixe.com/techknow/index.php/2006/06/15/mixins-in-ruby/ Googleルビーミックスインなら、さらに多くの情報を見つけることができます。 –

関連する問題