ユーザー一覧の名前のリンクを押すと、各ユーザーの日記一覧ページが表示されるようにしたいです。今現在のルーティングを整理しておきます。diaries_pathで遷移する先は現在ログインしているユーザーの日記一覧画面です。
usersコントローラにdiariesコントローラをネストすると、各ユーザーに紐づいた日記一覧が表示されるかな?と思ったので、やってみたいと思います。下記のようにルーティングを書き直しました。
resources :users, only: [:new, :create, :index] do
resources :diaries
end
こうすることで、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