⭐️プロフィール編集機能の実装

ユーザーのプロフィール編集機能を実装

手順

  • 1 . プロフィールコントローラーを作成

  • 2 . ルーティングの設定

  • 3 . アバター画像のカラムを追加

  • 4 . Viewの表示

1 . プロフィールコントローラーを作成

rails g controller profiles
でプロフィールコントローラーを作成し、
ユーザーのプロフィール画面では
詳細編集更新
ができれば良いので、
showeditupdateアクションのみを定義。

Image from Gyazo

privateで定義している

def set_user
    @user = User.find(current_user.id)
end

上記で現在ログインしているユーザーのidを@userに代入している。
プロフィールの編集や更新する時にはこのidが必要なのでedit、updateにbefore_actionを使って読み込ませている。

・プロフィールを更新する時にはストロングパラメーターを使って編集内容を引き継いでいる。

def user_params
    params.require(:user).permit(:email, :last_name, :first_name, :avatar)
end
2 . ルーティングの設定

本来、/users/:id/editのようになるはずですが、もしidを変えれば、他のユーザーのプロフィール編集ページに入ることができてしまう可能性があります。(もちろん、入れないようにバリデーションはかけますが)

プロフィール変更ページは自分自身に対してしか使わないので、idを用いず、pofile/editとなるようにルーティングを設定していきます。

resource :profile, only: %i[show edit update]

3 . アバター画像のカラムを追加

rails g migration AddAvatarToUsers
でusersテーブルにアバター画像のカラムを追加するためのマイグレーションファイルを作成。

class AddAvatarToUsers < ActiveRecord::Migration[5.2]
  def change
    add_column :users, :avatar, :string
  end
end

・画像のデータ型はstringに設定する。

4 . Viewの表示

Image from Gyazo

Image from Gyazo

・app/views/profiles/edit.html.erb

<div class="mt-3 mb-3">
          <%= image_tag @user.avatar.url, class: 'rounded-circle mr15', size: '100x100', id: 'preview' %>
</div>

上記の@userは、
Profiles_controller#editで定義している@userform_withに渡してviewに反映させている。

✅総括
  • プロフィール編集機能の実装でのルーティングでは、idを用いずに実装する。(セキュリティの為)

  • ログインユーザーからみてアプリケーション上、1つしか存在しない様なリソースが存在する場合、REST的なルーティングを定義したい場合には、resoursesという複数形ではなく、resourceを定義する。

個人的につまずいたこと(凡ミス)

プロフィール詳細画面で、課題自体は完了してたけど見本とHTML構成だけが違うと思って検証ツールやページのソース表示を試していたのですが、 ただただメールアドレスの長さが違うもので比べていたせいで、2時間ほど無駄にしました!😅

今後viewが見本と違うと思ったときは、
ローカルのものと全く同じ状態(メールアドレスやユーザー名などの情報)にして検証することがとても大事だと痛感しました!!泣
今後に生かしていきます!!