私はすべての単一のモデルで使用するいくつかの機能を持っており、ActiveRecord::Base
のようなものに配置したいので、すべてのモデルで同じ機能の名前を付ける必要はありません。モデルのapplication_helperまたはapplication_controllerに類似したものはありますか?
このようなものがベストプラクティスに従っているかどうかはわかりません。おそらく、いくつかのRailsのプロフェッショナルが私に何か良いことを示すかもしれない
私はすべての単一のモデルで使用するいくつかの機能を持っており、ActiveRecord::Base
のようなものに配置したいので、すべてのモデルで同じ機能の名前を付ける必要はありません。モデルのapplication_helperまたはapplication_controllerに類似したものはありますか?
このようなものがベストプラクティスに従っているかどうかはわかりません。おそらく、いくつかのRailsのプロフェッショナルが私に何か良いことを示すかもしれない
Railsで標準のオブジェクト指向のプラクティスを引き続き使用できることに注意してください。 ActiveRecord::Base
に共通するすべての機能を拡張したクラスを作成し、実際のActiveRecordモデルごとにそのクラスを拡張します。
必要なメソッドを含むモジュールを作成し、必要に応じて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
をグループ化することができます。
あなたのご意見ありがとうございます。 mixin方法論を使用するにはどうすればいいですか? – imjp
ここにはかなり良い基本的なチュートリアルがあります:http://juixe.com/techknow/index.php/2006/06/15/mixins-in-ruby/ Googleルビーミックスインなら、さらに多くの情報を見つけることができます。 –
良いOO設計は、クラスが "is a"関係を持っている場合にのみ継承することです。 Rubyの場合、Moduleを作成し、 'include'を使うことをお勧めします。 –
これを示す回答を作成してみませんか?私はモデルに 'include'を使う方法を知らない。 – imjp