⭐️プロフィール編集機能の実装
ユーザーのプロフィール編集機能を実装
手順
1 . プロフィールコントローラーを作成
2 . ルーティングの設定
3 . アバター画像のカラムを追加
4 . Viewの表示
1 . プロフィールコントローラーを作成
・rails g controller profiles
でプロフィールコントローラーを作成し、
ユーザーのプロフィール画面では
詳細、編集、更新
ができれば良いので、
show、edit、updateアクションのみを定義。
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の表示
・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で定義している@user
をform_with
に渡してviewに反映させている。
✅総括
プロフィール編集機能の実装でのルーティングでは、idを用いずに実装する。(セキュリティの為)
ログインユーザーからみてアプリケーション上、1つしか存在しない様なリソースが存在する場合、REST的なルーティングを定義したい場合には、resoursesという複数形ではなく、resourceを定義する。
個人的につまずいたこと(凡ミス)
プロフィール詳細画面で、課題自体は完了してたけど見本とHTML構成だけが違うと思って検証ツールやページのソース表示を試していたのですが、 ただただメールアドレスの長さが違うもので比べていたせいで、2時間ほど無駄にしました!😅
今後viewが見本と違うと思ったときは、
ローカルのものと全く同じ状態(メールアドレスやユーザー名などの情報)にして検証することがとても大事だと痛感しました!!泣
今後に生かしていきます!!