3
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

【Rails】ストロングパラメータの中身を取得する方法

Posted at

概要

Railsで、ストロングパラメータの中身を取り出す処理の書き方

この方法を使うシチュエーション

編集画面

編集内容確認画面

完了画面

という画面遷移で、何らかの理由により、
編集内容確認画面に、ストロングパラメータの値を表示したい時 など

事前知識

ストロングパラメータとは何か?
https://qiita.com/ozackiee/items/f100fd51f4839b3fdca8

実装例

編集画面

user_edit.html.erb
<!--nameemailが、入力フォームから確認画面へ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アクションと認識され、バリデーションエラーが発生していました。
それを回避しつつ、入力内容を確認画面で表示するのにストロングパラメータは使えないのかな、
と試してみたところ、上記の方法で取得&変数への代入ができました。

参考になれば幸いです。

3
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?