私は、最初の Ruby On Rails アプリ (ゲーテッド レジデンシャル コミュニティの Web サイト) を作成しています。
コミュニティ エリアは空き区画で構成され、1 つまたは複数の家が建てられた区画にあります。区画の所有者は 1 人だけですが、区画内の複数の家屋はそれぞれ異なる所有者を持つことができます。さまざまな役割を持つ選出された事務所の担い手 (自治会) やプロパティ管理スタッフなどがあります。最終的には、ユーザー グループ (所有者のみ、テナントのみ、または混合など) が存在します。
所有者とテナントはかなり異なる傾向があるため、別のクラスとして保持しています。同様に、そのファミリー メンバーも異なる傾向があります (OwnerFamilyMember クラスと TenantFamilyMember クラス)。
私の最初の設計は、単一のユーザーとロール、および割り当てモデルを持つことでした。ロールが多すぎました。したがって、上記のようにユーザー モデルを分割します (STI やポリモーフィック アソシエーションを使用したくないので、最初に正しく取得したいと思います)。
モデル クラス:
# All classes below inherit from ActiveRecord::Base, removed other attributes for compactness
class Owner
has_many :plots
has_many :houses
has_many :owner_family_members
end
class Tenant
belongs_to :house # declare house_id in table
has_many :tenant_family_members
end
class Staff ...
class Plot
belongs_to :owner # declare owner_id in table
end
class House
belongs_to :owner # declare owner_id in table
end
class OwnerFamilyMember
belongs_to :owner # declare owner_id in table
end
class TenantFamilyMember
belongs_to :tenant # declare tenant_id in table
end
- テナントまたは所有者は家に住んでいます。
- オーナーまたはテナントの家族メンバーはコミュニティに参加しますが、特定の特権アクションについてはプライマリ オーナーまたはテナントに依存しています
この設計では、さまざまなユーザー モデルに暗黙の役割があり、必要に応じて追加のサブ役割を持つことができることを理解しています。所有者は住民協会の会計担当者になることができ、テナントは水保全グループを率いることができます。役割はさらに進化するため、複数の User モデルを保持する方がよいと思います。
私は正しい軌道に乗っていますか?このレシピで間違ったことを混同していませんか? これをよりよく理解するのに役立つフィードバック、概念または実装固有のフィードバックを熱心に聞いてください。
私はデータベースの概念、OO プログラミングを理解していますが、本番レベルのデータベース設計または RoR アプリケーションの初心者です。この長い投稿を読んでくれてありがとう。- ジャヤワント