Railsで登録の際に確認画面を挟むベスト・プラクティス
Railsで登録する際に確認画面を挟む実装って割りとよくありそうだし、実際自分でもやったことがあるけどイマイチ設計でしっくりきていなかった。また、ネットで出てくるそれ系の情報も微妙なものが多い気がする。そんな中、最近業務で作ったやつは他の人にFBもらいつつ良い感じにできたのではと思えたので共有する。
サンプルとしてユーザーの投稿画面があるとする
このときpostする先をconfirmとかにする
post :confirm
バリデーションは確認画面に遷移する前にしときたい
def confirm @user = User.new(user_params) return if @user.valid? render :new end
確認画面はこんな感じ
確認画面なので間違っていたら前の画面に戻りたいし
入力した値はフォームにセットされている状態が望ましい
なのでhiddenで値を持っといてpostして戻るようにする
<%= form_for :user, url: new_users_path do |f| %> <%= f.hidden_field :name %> <%= f.hidden_field :email %> <%= f.hidden_field :sex %> <%= f.submit '入力画面へ戻る'%> <% end %>
backメソッドで入力画面を呼び出す
def back @user = User.new(user_params) render :new end
入力画面に戻った際のurlは users/back でなく users/newでありたい
なのでroutingを設定
post :new, path: :new, as: :new, action: :back
createとpathメソッド名がかぶって上手く動作しなくなるのでpathとasオプションを使う
確認あとの登録もhiddenから値を渡すようにする
<%= form_for :user, url: users_path do |f| %> <%= f.hidden_field :name %> <%= f.hidden_field :email %> <%= f.hidden_field :sex %> <%= f.submit '登録する'%> <% end %>
def create User.create!(user_params) render :complete end
以上、変なとこあればFBください。
サンプルコードはこちら
github.com