Profile モデルを定義して Devise の User に紐付ける

投稿者: | 2019年9月17日

ここまでで Devise のユーザ認証をユーザ名で行えるようになりました。次にアカウントに対して、自己紹介やアバターを追加できるようにします。
User モデルに全部追加していってもよいのですが、ユーザ一覧的なものを別途表示したかったりうするときに認証用のモデルである User をいじるのもいかがなものかということで、別途 Profile モデルを定義して、自己紹介やアバター、ニックネーム等の情報はそちらにまとめたいと思います。

まずは、Profile モデルをユーザ作成時に生成するところまで。
1. Profile モデルの定義
2. User モデルと Profile モデルの 1対1 関連付け
3. ユーザ登録時に Profile を作成してデフォルトの情報を入力して User に紐付け

Profile モデルの定義

まずは Profile モデルを定義します。名前とアバター、自己紹介を定義しておきます。アバターについては後で Carrierwave を使って画像の管理ができるように定義しておきます。

User モデルと Profile モデルの 1対1関連付け

これもいつもの通り、User モデルと Profile モデルで has_one と blongs_to を定義しておきます。

ユーザ登録時に Profile を作成して User に紐付け

次にユーザ登録時に Profile 情報を生成して User に紐付けるようにします。すでに User に関連する Devise の controller は作成しているので、これを編集します。
ユーザ作成は、app/controller/users/registrations_controller.rb で定義されています。ユーザの作成は create メソッドで行われているため、ここを書き換えます。ここでは、初期値として Profile の name に、User の username を設定するようにしました。

動作確認

新規ユーザ作成時に Profile を作成して紐付けるようにしたので、一度 DB を初期化して動作確認します。

サインインで新規ユーザを登録したあと一度 rails サーバをとめて、コマンドラインでいろいろ確認します。

ユーザ登録時に Profile が作成され、意図したとおりに User の username が Profile の name として設定されていることが確認できました。

 

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です