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?

ポートフォリオ構築の振り返り(第8回:部分テンプレートを使ったマイページ作成)

0
Last updated at Posted at 2025-09-06

はじめに

前回は ユーザープロフィールページの作成とカラムの追加 を行いました。
今回はさらに進めて、「誰が投稿したのか」 がわかるように投稿一覧や詳細にプロフィールを表示していきます。

Railsでは同じUIを複数箇所で使うときに 部分テンプレート(partial) を活用すると便利です。
今回のゴールは、投稿に「ユーザーのプロフィール情報(名前・アイコン・自己紹介)」を紐づけて表示できるようにすることです。

これまでの記事はこちら👇
ポートフォリオ構築の振り返り(第1回:プロジェクト概要と設計)
ポートフォリオ構築の振り返り(第2回:Railsアプリ立ち上げ〜トップページ表示)
ポートフォリオ構築の振り返り(第3回:Deviseでログイン機能を実装)
ポートフォリオ構築の振り返り(第4回:ヘッダーの作成とログイン機能の実装)
ポートフォリオ構築の振り返り(第5回:投稿機能と画像投稿フォームの作成)
ポートフォリオ構築の振り返り(第6回:投稿機能の作成)
ポートフォリオ構築の振り返り(第7回:ユーザーカラム追加)


手順の流れ

今回やったことは次の通りです。

  1. プロフィール表示用の部分テンプレートを作成
  2. 投稿ビューに部分テンプレートを読み込む
  3. ログインユーザーと他ユーザーで表示を切り替える

1. 部分テンプレートを作成

共通で利用するユーザープロフィールUIを、app/views/users/_profile.html.erb にまとめます。

<div class="text-center mt-5">
  <% if user == current_user %>
    <%= link_to edit_user_path(current_user) do %>
      <%= image_tag user.get_profile_image(150, 150),
              style: "width: 150px; height: 150px; object-fit: cover;",
              class: "rounded-circle" %>
    <% end %>
  <% else %>
    <%= image_tag user.get_profile_image(150, 150),
              style: "width: 150px; height: 150px; object-fit: cover;",
              class: "rounded-circle" %>
  <% end %>
  <h5><%= user.name %></h5>
</div>
<div class="mt-5">
  <p><%= user.profile %></p>
</div>

<div class="d-grid mb-1">
  <%= link_to "投稿一覧", user_path(user), class: "user-menu btn btn-primary text-start" %>
  <%= link_to "グループ一覧", groups_user_path(user), class: "user-menu btn btn-primary text-start" %>
  <% if user == current_user %>
    <%= link_to "お気に入り一覧", favorites_user_path(current_user), class: "user-menu btn btn-primary text-start" %>
    <%= link_to "プロフィール編集", edit_user_path(current_user), class: "user-menu btn btn-primary text-start" %>
  <% end %>
</div>

コードのポイント

  • if user == current_user
    → 自分自身のプロフィールなら、アイコン画像クリックで編集ページに飛べるようにしています。

  • image_tag user.get_profile_image(150, 150)
    → 事前に定義した get_profile_image メソッドでアイコン画像を取得。サイズも指定可能。

  • メニュー部分はif文を使って「自分の場合だけ」お気に入りや編集リンクが出るようにしました。

    <% if user == current_user %>
      <%= link_to "お気に入り一覧", favorites_user_path(current_user), class: "user-menu btn btn-primary text-start" %>
      <%= link_to "プロフィール編集", edit_user_path(current_user), class: "user-menu btn btn-primary text-start" %>
    <% end %>
    

2. 投稿ビューに部分テンプレートを読み込む

投稿一覧や詳細ビューに以下を追記して呼び出します。

<%= render "users/profile", user: @post.user %>

これで投稿ごとに「誰が投稿したか」がプロフィール付きで表示されます。


3. 表示例

一覧画面や詳細画面で、こんな風に表示されます👇

  • ユーザー名とアイコン
  • 自己紹介
  • 投稿・グループ一覧へのリンク
  • (自分の場合は)お気に入り一覧・プロフィール編集リンク

これにより、投稿とユーザー情報が自然に結びつくようになります。


まとめ

今回は 部分テンプレートを利用して「誰が投稿したのか」わかるプロフィール表示 を実装しました。

  • 共通のUIは部分テンプレート化して再利用
  • 投稿ビューから render で呼び出すだけで使える
  • ログインユーザーかどうかで表示内容を切り替え

次回は、👉 次回は「投稿カードを共通化して、一覧画面をすっきり表示する」作業に進みます!
ポートフォリオ構築の振り返り(第9回:itemのカード表示と共通化)


用語解説

  • 部分テンプレート(partial)
    Railsのビューを部品化したもの。ファイル名の先頭に _ をつけて作成し、render メソッドで呼び出して使う。重複を避け、メンテナンス性を高められる。

  • render "users/profile", user: @post.user
    users/_profile.html.erb を呼び出す記法。user: でローカル変数を渡してテンプレート内で利用できる。

  • current_user
    Deviseでログインしている現在のユーザー情報を返すヘルパーメソッド。



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?