Rails ウィザード形式でユーザー登録機能を実装してみた


railsを使って、フリマアプリのチーム開発をしています。
自分が担当したユーザー機能(Gem devise周り)での実装でウィザード形式で進めた時に
アソシエーションの組み方についての備忘録です。

やりたいこと

deviseをカスタマイズしてデータベース構造に沿って登録機能を実装する。
1ページ目:ユーザー情報(メアドや名前、生年月日とか)
2ページ目:住所関連(送付先とか)

ユーザー情報をsessionで保ったまま2ページ目(住所入力)へNextボタンで遷移させたい。かつ、住所入力に使用するインスタンス生成も同時に実施する。

テーブル設計、アソシエーション

今回は
 userモデルにhas_many
 addressesモデルにbelongs_to でテーブル設計をしました。

ハマったこと

参考にしたアプリだとアソシエーションはuserテーブルは「has_one :address」だったため
そのまま参照すると /user/registrations_controllerがうまく動かずcreateができない。
エラー発生。

解決

registrations_controllerのcreateメソッド内の @address を修正することで解決。

has_many のとき
@address = @user.addresses.build

has_one のとき
@address = @user.build_address

参考までに。

form_forを今回は使用しています。
form_withだと記載方法が違う点があると思うのでそこは調べてみてください。
参考になれば幸いです。