2011-02-24 16 views
3

データベースのユーザテーブルを表すuserというアクティブレコードクラスがあるとします。ActiveRecordオブジェクトからの継承

しかし、私は

  • 特別な機能を持っているユーザーのさまざまな種類があり
  • 特殊変数
  • カスタム関係(雇用者にhas_many会社、会社:)また、これら

しかし、belongs_toの従業員ユーザーには多くの機能が共通しています。だから私がしたいのは、それぞれの異なるタイプのユーザーのクラスを作成し、ユーザークラスから継承することです。

  • ユーザー<はActiveRecord ::ベース
  • 雇用<ユーザー
  • 従業員<ユーザー
  • カスタマー<ユーザー

そのような何かを行うための最善の方法は何ですか?

おかげ

答えて

3

アプリケーションの多くは、ある種のUserモデルから始めます。時間の経過と共に、異なる種類のユーザーが出現するにつれて、それらの間のより大きな区別をすることが理にかなっているかもしれません。 Userのサブクラスとして、AdminおよびGuestクラスが導入されています。現在では、共有動作はUserにあり、サブタイプの動作はサブクラスにプッシュダウンできます。ただし、すべてのユーザーデータは依然としてユーザーテーブルに常駐できます。

type列を、特定の行にインスタンス化するクラスの名前を保持するusersテーブルに追加するだけです。 Active Recordは、オブジェクトをデータベースからロードする際にそのオブジェクトの種類をインスタンス化します。

シングルテーブル継承またはSTI(略称)と呼ばれます。

STIについての最近の記事はこちらです:http://code.alexreisner.com/articles/single-table-inheritance-in-rails.html

+0

ありがとうございます。最後に、各クラスのカスタムリレーションシップはどうですか? –

関連する問題