0
0

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/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のパスにリダイレクトします。以上

#参考
https://qiita.com/saik/items/ae7c57e26037115ed2fc

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

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?