2011-10-25 6 views
2

私はこの請求書発行アプリケーションを持っています。Rails 3.人をモデル化するには?

これら4つの機種持っている現在、私は:

人物:

  • コンタクト
  • ユーザー(請求書を送る人)
  • (彼らはクライアントに似ている、彼らはに請求書をお送りします)
  • 会社(ユーザーは会社に所属)
  • 組織(連絡先は組織に属します)。

この現在の設定は実際にはクリックしません。それは自然な気がしません。

私が考えたもう1つの選択肢は、Organizationに属するPeopleモデルを作成することでした。

人々は、列TYPE_ID必要があります(タイプ:、クライアント、管理者が将来的にはさらに追加)

をしかし、私は知らないが、何とかそれだけで参照することがあってはならないTYPE_ID欄のように感じています2列テーブル。

この場合、どのモデルの設定を使用しますか?明確化のため

---- を追加しました:----

は、近い将来にいくつかのクライアントがログインする能力を持っているということを覚えておいてください。 注:クライアントの場合は単なる個人であり、組織に属しません。

ユーザーは、ログインして請求書を送信するユーザーを表します。彼は会社に所属しています。

連絡先は、請求されている人を表します。連絡先は、組織に属していてもいなくてもかまいません。彼らは、ロジックが異なるしている場合は、私の経験では

models

答えて

3

Polymorphic associationsあなたの状況に役立ちます。

すべてのその実体は人なので、あなたがこのような何かを実装することができます

Model

1

single-table inheritanceアプローチは、複数のユーザークラスに適合します。

完全に別の連絡先とユーザーがあり、連絡先がユーザーでもログインできない、またはフィールドを共有できない場合は、別のモデルにする必要があります。

+0

クライアント(または請求書を取得する人)の機能をログでは、将来的に追加する必要があります。 – leonel

+0

最近のプロジェクトでは、データを格納するための 'Partner'モデルとログインするための' PartnerUser

1

あなたの現在の設定はあまりにも悪くはないようです。

連絡先とユーザーが異なるデータ要件(私の推測どおり)と大きく異なる場合は、シングルテーブル継承により多くの課題が生じます。このように考えてください。ユーザーか連絡先かによって空の列がたくさんある場合は、STIを使用しないでください。空のフィールドが非常に少ない場合、それは問題ありません。

会社と組織のフィールドはどれくらい重要ですか?請求書を送付する連絡先に会社名と住所のテキストフィールドがありますか?たぶんそれは物事を簡素化するのに役立ちます。

関連する問題