def show
@post = Post.find_by(id: params[:id])
** @user = @post.user**
@likes_count = Like.where(post_id: @post.id).count
end
rails5でいいねの数を表示させるために、posts_controller.rbのshowアクションを定義しているところで、
@user = @post.userの意味がよくわかりませんでした。
@post = Post.find_by(id: params[:id])は、
ルーティングのURLから取得できるidの値をもとに投稿データを取得し、@postに代入。
@likes_count = Like.where(post_id: @post.id).countは、likesテーブルから、post_idの値が上記の投稿者のidであるデータ(いいね)の件数を取得すると理解しています。
以下、showアクションに対応するビューファイル
<div class="main posts-show"> <div class="container"> <div class="posts-show-item"> <div class="post-user-name"> <img src="<%= "/user_images/#{@user.image_name}" %>"> <%= link_to(@user.name, "/users/#{@user.id}") %> </div> <p> <%= @post.content %> </p> <div class="post-time"> <%= @post.created_at %> </div> <% if Like.find_by(user_id: @current_user.id, post_id: @post.id) %> <%= link_to("/likes/#{@post.id}/destroy", {method: "post"}) do %> <span class="fa fa-heart like-btn-unlike"></span> <% end %> <% else %> <%= link_to("/likes/#{@post.id}/create", {method: "post"}) do %> <span class="fa fa-heart like-btn"></span> <% end %> <% end %> <%= @likes_count %></div> </div><% if @post.user_id == @current_user.id %> <div class="post-menus"> <%= link_to("編集", "/posts/#{@post.id}/edit") %> <%= link_to("削除", "/posts/#{@post.id}/destroy", {method: "post"}) %> </div> <% end %> </div>
よろしくお願いします。
回答1件
あなたの回答
tips
プレビュー