ユーザー情報の編集機能実装

ユーザー情報編集機能の実装

今回はユーザー情報の編集機能を実装していく。最終的な表示が下記のようになる。(今回はレイアウト調整しないため、不恰好な表示となる。)

作業の流れとしては下記の手順で行う。

  1. コントローラのアクションを記述

  2. ルーティングの確認

  3. ビューの作成

  4. 動作確認

コントローラのアクションを記述

今回はusers_controllerのeditアクションとupdateアクションに記述していく。

app/controllers/users_controller.html.erb

  def edit
    @user = User.find(params[:id])
  end

  def update
    @user = User.find(params[:id])
    @user.update(user_params)
    redirect_to user_path(@user)
  end

  private

  def user_params
    params.require(:user).permit(:name, :introduction, :profile_image)
  end

解説) @user = User.find(params[:id])

URLのIDを取得し、同じIDのuser情報を取得し、@userへ代入する。

@user.update(user_params)

データベースのuser情報を更新する。

redirect_to user_path(@user)

更新したユーザーのusers/show画面に遷移する。

def user_params params.require(:user).permit(:name, :introduction, :profile_image) end

ストロングパラメータ

params ... formから送られてきたデータがparamsに入っている。

require ... 送られてきたデータをモデル名を指定し、データの絞り込みを行う。(ここではuser)

permit ... requireで絞り込みを行ったデータの中から保存を許可するカラムを指定。

まとめると、保存するデータを指定したモデルのカラムに制限しているということ。

ルーティングの確認

ルーティングにusersのeditとupdateが記述されているか確認する。

config/routes.rb(userの記述のみ抜粋)

resources :users, only: [:index, :show, :update, :edit]

上記のように記述されていれば問題ない。抜けていた場合、追記する。

ビューの作成

app/views/users/edit.html.erb

<div>
  <div>
    <div>
      <h2>User info</h2>
      <%= form_with model: @user do |f| %>
        <div>
          <%= f.label :name %>
          <%= f.text_field :name, autofocus: true, id:"inputName" %>
        </div>
        <div>
          <%= f.label :profile_image, "Image" %>
          <%= f.file_field :profile_image, accept: "image/*" %>
        </div>
        <div>
          <%= f.label :introduction %>
          <%= f.text_area :introduction, autofocus: true, id:"inputIntroduction" %>
        </div>
        <div>
          <%= f.submit "Update User" %>
        </div>
      <% end %>
    </div>
  </div>
</div>

動作確認

下記の動作を確認する。

  • user情報のリンクボタンから、edit画面にリンクが遷移する。

  • edit画面のビュー表示が問題なく表示されている。

  • user情報の更新が問題なくできる。(name, profile_image, introduction)

  • 更新後の遷移先がuserのshow画面に遷移している。

以上。

アプリケーションの作成 参考URL  作成するアプリケーションについて - takifugu’s blog