マイページ実装

内容

マイページを実装し、個人の投稿一覧表示およびユーザー情報編集ができるようにする

個人の投稿一覧表示機能

1. MVCの設定

Userモデルはすでに新規登録機能で実装済みのため、今回はusersコントローラーのみ作成
ターミナル

% rails g controller users

ルーティング、usersコントローラー、ビューを編集
今回はマイページで一覧表示と個人情報編集を実装するため、indexとedit、updateを設定(edit、updateは別の機能で実装)
と思ったが上記は間違い
→indexだとユーザー一覧表示になる
→ユーザーの投稿一覧を表示したいため、showを設定(ユーザー詳細表示)
users_controller.rb

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

投稿一覧表示のビューはすでに実装したposts/index.html.erbを参考に作成

2. rubocop

ユーザー情報編集機能

1. MVCの設定

編集ページのビューは新規登録ページを使い回し
ルーティングは先に設定しているので、コントローラーを編集
※メールアドレスとパスワードを編集すると、デフォルトでログアウトするように設定されている
→これらを編集したいときはbypass_sign_inを使用するみたい users_controller.rb

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

def update
  @user = User.find(params[:id])
  if @user.update(user_params)
    bypass_sign_in(@user)
    redirect_to user_path(@user.id)
  else
    render :edit
  end
end

private

def user_params
  params.require(:user).permit(:nickname, :email, :password, :password_confirmation, :last_name, :first_name, :last_name_reading, :first_name_reading, :birthday)
end

同一の記述は最後にまとめてbefore_actionにまとめることとする
また、ログアウト状態で編集ページへ遷移できないようにbefore_actionに記述する
他人の編集ページへ遷移することもできないようにbefore_acitionで設定する
users_controller.rb

before_action :move_to_index, except: :show

private
def move_to_index
  redirect_to root_path if current_user.id != @user.id
end

2. ヘッダーにマウスオーバーすると表示が変わるよう設定

header.jsファイルを作成し、そこにコードを記述して実装
header.jsを読み込む
app/assets/javascript/packs/application.js

require("../header")

header.jsを編集

次回 投稿編集機能を実装

参考

新規投稿している時、小数点がある数値が保存できなかった
number_fieldは整数しか扱えないらしいので、stepをつける
new.html.erb

form.number_field :~, step: "0.1"

また、integer型でDBを設計してしまっていたため、マイグレーションファイルをfloat型に修正
posts.rbマイグレーションファイル

t.float :~, null: false