ユーザー一覧の名前のリンクを押すと、各ユーザーの日記一覧ページが表示されるようにしたいです。今現在のルーティングを整理しておきます。diaries_pathで遷移する先は現在ログインしているユーザーの日記一覧画面です。

https://s3-us-west-2.amazonaws.com/secure.notion-static.com/f4a86164-1bc2-4972-89f9-28ad41ee0c33/_2021-06-03_12.00.42.png

usersコントローラにdiariesコントローラをネストすると、各ユーザーに紐づいた日記一覧が表示されるかな?と思ったので、やってみたいと思います。下記のようにルーティングを書き直しました。

resources :users, only: [:new, :create, :index] do
    resources :diaries
  end

https://s3-us-west-2.amazonaws.com/secure.notion-static.com/f774a4cf-b30f-4da3-973f-daa658a44324/_2021-06-03_12.45.57.png

こうすることで、user_idが1の日記一覧を表示するときは/users/1/diariesで取得することができるようになりました。

今までビューファイルや、コントローラはcurrent_userの日記一覧を表示したり、日記新規投稿画面を表示したり、編集できたりしたので、current_userが他のユーザーの日記一覧にアクセスできるけど、新規投稿はできなかったり、編集や消去ができないように設定する必要があります。それでは一つづつ変更していきます。

日記一覧表示

エラーが出てしまうのでヘッダーの日記一覧と新規投稿のリンクを遷移しないように設定しておきました。

shared/_header.html.erb

<div class='collapse navbar-collapse' id='navbarSupportedContent'>
      <ul class='navbar-nav ml-auto main-nav align-items-center'>
        <li class='nav-item'>
          <%= link_to t('defaults.mine'), "#", class: 'nav-link' %>
        </li>
        <li class='nav-item'>
          <a class='nav-link' href='#'>follower's diary</a>
        </li>
        <li class='nav-item'>
          <%= link_to t('defaults.followers'), users_path, class: 'nav-link' %>
        </li>
        <li class='nav-item'>
          <%= link_to t('defaults.logout'), logout_path, method: :delete, class: 'nav-link' %>
        </li>
        <li class='nav-item'>
          <%= link_to t('defaults.new'), "#", class: 'nav-link' %>
        </li>
        <li class='nav-item'>
          <a class='nav-link' href='#'>💐</a>
        </li>
      </ul>
</div>

diariesコントローラのindexアクションを修正します。

diaries_controller.rb

def index
  @user = User.find(params[:user_id])
  @diaries = @user.diaries
end