LoginSignup
0
0

More than 1 year has passed since last update.

[Rails/devise] アカウント情報の編集・変更機能の実装

Posted at

概要

deviseでユーザー管理機能を実装した際、

「ユーザーがパスワードやアイコンの画像を編集・変更が行える機能は必須では・・・」

と考えられたため実装しました。deviseで作成したupdateの設定やapplication_controller.rbに追記を行えば簡単に実装できましたのでここに記述します。

環境

  • macOS Big Sur バージョン 11.2.3

  • Ruby 2.6.5

  • Rails 6.0.3.6

  • Mysql Ver 14.14 Distrib 5.6.51

前提

  • deviseをインストールし、モデルを作成している。
    ※この記事ではコントローラーの作成から始めます。

流れ

1.deviseのコントローラーを作成
2.edit.html.erbにformを記述
3.routes.rbにupdateのルーティングを記述
4.application_controller.rbにてupdateによるパラメーターの変更を許可する
5.registrations_controller.rbに上書き後の遷移先を記述

1.deviseのコントローラーを作成

deviseのコントローラーを作成します。

ターミナル.
rails g devise:controllers users
                           ↑ユーザー情報に関わるモデル名

これでregistrations_controller.rbを含むdeviseのコントローラーが作成されます。

2.edit.html.erbにformを記述

edit.html.erb
<%= form_with model: @user, url:user_registration_path, class: 'registration-main', local: true do |f| %>
                         ↑ 「rails routes」で表示されるusers/registrations#updateのPrefixを記述。

3.routes.rbにupdateのルーティングを記述

edit.html.erbで設定したボタンを押すとregistrations_controller.rbを経由してデータが上書きされるようにします。

application_controller.rb.
Rails.application.routes.draw do
  devise_for :users, controllers: {
    sessions: "users/sessions",
    registrations: "users/registrations" # registrations_controller.rbに導くためのルーティングを記述
  }

# 中略

  root to: 'photos#index'
end

registrations_controller.rbを経由するためのルーティングを設定しました。

4.application_controller.rbにてupdateによるパラメーターの変更を許可する

sign_upの際に「初期設定のないカラムを保存するための許可」を記述されたと思われます。
updateの際も同様に「上書きする許可」を記述します。
今回は「nickname,imgae,password」の編集・変更機能を実装することが目的だったので以下のようにしました。

application_controller.rb
class ApplicationController < ActionController::Base
# 中略
    private
    def configure_permitted_parameters
      devise_parameter_sanitizer.permit(:sign_up, keys: [:name, :nickname, :self_introduction, :image, :twitter, :facebook, :instagram])
      devise_parameter_sanitizer.permit(:account_update, keys: [:nickname, :image]) #account_updateにつづいて編集・変更したいカラム名を入れる。

    end

# 中略

end

これで編集・変更機能の内容は終わりました。最後に「上書きを行った後、どこに遷移するのか」を記述します。

5.registrations_controller.rbに上書き後の遷移先を記述

今回は上書き後に確認が行えるようcurrent_user(ログインしているユーザー)のマイページに遷移するようにします。

registrations_controller.rb
class Users::RegistrationsController < Devise::RegistrationsController
#中略

  protected

  def after_update_path_for(resource)
    user_path(current_user)
  end
#中略

これでregistrations#updateアクション後に、after_update_path_forのパスにリダイレクトします。以上

参考

0
0
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
0
0