概要
Railsで、ストロングパラメータの中身を取り出す処理の書き方
この方法を使うシチュエーション
編集画面
↓
編集内容確認画面
↓
完了画面
という画面遷移で、何らかの理由により、
編集内容確認画面に、ストロングパラメータの値を表示したい時 など
事前知識
ストロングパラメータとは何か?
https://qiita.com/ozackiee/items/f100fd51f4839b3fdca8
実装例
編集画面
user_edit.html.erb
<!--nameとemailが、入力フォームから確認画面へsubmitされる-->
<!--作成済みのユーザーについての編集であり、そのID値は別途、URLパラメータで渡すものとする-->
<%= form_with(model:@user, url: confirm_user_path) do |f| %>
<div class="field">
<%= f.text_field :name, placeholder: "ユーザ名を入力してね!" %>
</div>
<div class="field">
<%= f.text_field :email, placeholder: "e-mailアドレスを入力してね!" %>
</div>
<div class="actions">
<%= f.submit %>
</div>
<% end %>
コントローラー内、ストロングパラメータ
UsersController.php
//ストロングパラメータを定義
private
def user_params
params.require(:user).permit(:name, :email)
end
コントローラー内、確認画面表示用変数定義
UsersController.php
def edit_confirm
@user = User.find(params[:id]) #URLパラメータから取得したIDでユーザーデータ取得(例:users/3/edit_confirm)
@user.name = user_params[:name] #ストロングパラメータの値取り出し&変数への代入
@user.email = user_params[:email] #同上
end
確認画面
edit_confirm.html.erb
<h2>編集内容確認</h2>
<p>氏名:<%= @user.name %>さん</p>
<p>メールアドレス:<%= @user.email %></p>
なぜこの記事を書いたか
「確認画面」の作成方法について、Qiita記事などでは、よく、
UsersController.erb
@user = User.new(user_params)
と設定し、テンプレート側で
edit_confirm.html.erb
<h2>編集内容確認</h2>
<p>氏名:<%= @user.name %>さん</p>
<p>メールアドレス:<%= @user.email %></p>
と呼び出していますが、私の場合、
createアクションについてとあるバリデーションを設定したため、
User.newを実行すると、それがcreateアクションと認識され、バリデーションエラーが発生していました。
それを回避しつつ、入力内容を確認画面で表示するのにストロングパラメータは使えないのかな、
と試してみたところ、上記の方法で取得&変数への代入ができました。
参考になれば幸いです。