を公開私の目標:は継承されたモデルの上に追加のフィールドを追加し、すべてのスーパーと子クラスのフィールドに
私は異なるプロファイルで、ユーザーの二つの異なるタイプを作成しようとしています。
Barber
、Client
、BarberProfile
、およびClientProfile
は、私は私のベースUser
email
、password
などの情報を含むオブジェクト、そして工夫はを追跡し、他のすべてのフィールドを持っています。
ベースUser
モデルには、すべてのユーザーに必要な基本情報をすべて記録するProfile
があります。 Client
とBarber
:たとえば、first_name
、last_name
、avatar
など
は、私は、ユーザーの二つの異なるタイプを作成するために、単一テーブル継承を使用しています。
これらのタイプのユーザーのそれぞれには、ベースがProfile
に関連付けられていて、それぞれBarberProfile
とClientProfile
に属する追加のフィールドがあります。
Barber
には、Client
には必要なものがあります。例えば、bio
。 ClientProfile
にはClient
が必要ですが、Barber
は必要ありません。たとえば、hair_type
です。
私が現在持っている、と私の問題:
上述したように、私はUser
とProfile
用のテーブルを作成しました。だから私はuser.profile.first_name
に電話することができます。追加のフィールドを追加するには、BarberProfile
テーブルとClientProfile
テーブルを作成しました。
ユーザータイプがBarber
の場合は、user.profile.bio
を参照できるようにしたいと考えています。しかしbio
はベースプロファイルの一部ではありません。この場合、私は必要なものすべてを得るためにProfile
とを関連付けて関連付け、BarberProfile
を関連付けなければなりません。私はちょうどuser.profile.first_name
とuser.barber_profile.bio
をやることができますが、それは面倒です、私は基本的に同じタイプのモデルから2つの異なる関連付けをしています。 にすべてのフィールドを継承させてProfile
から受け取り、固有のBarber
フィールドを上に追加するのは簡単なことです。
Railsでこれを行うにはどうすればよいですか?
編集:私はこれをしたい主な理由の一つはので、私はBarber
で同じフォーム内first_name
とbio
のようなものを更新することができます。同じように、Client
の場合、同じフォーム内のfirst_name
とhair_type
が同じフォーム内にあります。
ありがとうございました。プロファイルを拡張することが私の最初の本能であり、かなり直感的であるように、私はそのアイデアが気に入っています。だからあなたの提案では、barber_profile_dataは別のテーブルとして存在しますか?この設定で1つのフォームからbioを更新することは可能ですか? – Doug
はい、BarberProfileDataには独自のテーブルが必要です。更新については、可能でなければなりません。とにかく、いつでも更新アクションをカスタマイズして、正しいfields_forを設定するのに必要なものを実行することができます。 – arieljuod