2
1

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

#はじめに
ユーザー管理機能(ログイン/ログアウト)を実装したあとに、ユーザー編集機能を実装しました。バリデーションで少してこずったので、書き記します。

開発環境
ruby 2.6.6
rails 6.0.0

#目次
1.ルーティング
2.コントローラー
3.モデル

#1.ルーティング
編集機能実装にあたり、「edit」及び「update」アクションをルーティングとして追加する。

config/routes.rb
resources :users, only: [:edit, :update]

#2.コントローラー
ターミナルでuserコントローラーを作成する。想定として、一度ユーザーの「nickname」、「email」、「パスワード」を新規登録しており、後から「nickname」と「email」を編集できるようにする。

ターミナル
rails g controller users

作成したコントローラーに下記記述を追記する。deviseはインストール済みなので、「current_user」メソッドが使用できる。userテーブルには「nickname」と「email」がカラムとして既に存在している。

app/controllers/users_controller.rb
def edit
    end

def update
  if current_user.update(user_params)
    redirect_to root_path
  else
    render :edit
  end
end

private
def user_params
  params.require(:user).permit(:nickname, :email)
end

#3.モデル
パスワードに関するバリデーションに「on: :create」を追加する。このオプションによりパスワードに関するバリデーションは新規登録のみ適用される。ちなみにこのcreateオプションを追加しないと、「nickname」、「email」を正しく更新できない。(パスワードの入力がないためバリデーションで拒否される)

app/model/user.rb
with_options presence: true do
---------------中略-----------------
    PASSWORD_REGEX = /\A(?=.*?[a-z])(?=.*?\d)[a-z\d]+\z/i.freeze
    # 半角アルファベット(大文字・小文字・数値)
    validates :password, format: { with: PASSWORD_REGEX, message: 'はアルファベットと数字を含めてください' }, length: { minimum: 6 }, on: :create
  end

以上

2
1
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
2
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?