私は今、アプリケーションの設計段階にあります。ほとんどの場合、アプリケーション モデルの洞察を得たり、必要なものを定義したりするために紙の上で作業を行っています。そして、解決方法がわからない、またはより具体的には、それをドライに保つために実装する方法がわからないという問題が1つ見つかりました。だからここに契約があります:
私は3つの異なるタイプのユーザー/アカウントになるアプリケーションを持っています:
通常のアカウント- アカウントには、アプリケーションで基本的な権限を持つ基本的なプロファイルがあり、通常のアカウントを持つユーザーは、全員の公開プロファイルを表示したり、自分のプロファイルを変更したり、プロファイル写真を 1 つだけ持つことができたり、検索したりできます。
高度なアカウント- 高度なプロファイルがあります。つまり、ユーザーは連絡先情報、外観の詳細を指定でき、予約ページを持ち、オファーを取得でき、カレンダーを持つことができます
企業アカウント- 企業の連絡先情報を含む企業プロファイルがあり、上級ユーザーにオファーを作成したり、アプリケーション内のすべてのプロファイルを参照したりできます
したがって、基本的に、すべてのユーザーに対して 1 つのユーザー モデルをまとめて使用し、認証には Devise を使用することにしました。ユーザーが作成された後、レギュラー、アドバンスト、カンパニーのアカウントタイプを選択できる画面を表示したいと思います。その後、システム内の適切な権限と適切なプロファイルが付与されます。今後、アカウントの種類を変更することはできません。
また、コードをクリーンでドライに保ちたいのですが、最適なソリューションを見つけるのに非常に苦労しています。そして今、頭を壁にぶつけています。なぜなら、やり方が分からないからです。質問は次のとおりです。
このための最終的なモデル ダイアグラムはどのように見えるでしょうか。それは多形的な関連であるべきですか?または、一般的なものにする必要があります。
class User < ActiveRecord::Base
devise :database_authenticatable, :registerable,
:recoverable, :rememberable, :trackable, :validatable
attr_accessible :email, :password, :password_confirmation, :remember_me, :account_type
has_one :account
has_one :entertainer
has_one :company
after_create :create_account
def create_account
if self.account_type == 'Advanced'
self.entertainer = AdvancedAccount.create(user_id: self.id)
elsif self.account_type = "Company"
self.company = CompanyAccount.create(user_id: self.id)
else
self.account = RegularAccount.create(user_id: self.id)
end
end
end
または、私は完全に間違った道を進んでいますか?この問題のベストプラクティスは何ですか? アドバイスありがとうございます!