いいねする
def create
@like = Like.new(user_id: @current_user.id, post_id: params[:post_id])
@like.save
redirect_to("/posts/#{params[:post_id]}")
end
<%= link_to("いいね","/likes/#{@post.id}/create", {method: "post"}) %>
いいねを消す
def destroy
@like = Like.find_by(user_id: @current_user.id, post_id: params[:post_id])
@like.destroy
redirect_to("/posts/#{params[:post_id]}")
end
<%= link_to("いいね済","/likes/#{@post.id}/destroy", {method: "post"}) %>
HTML要素に対してlink_toメソッドを使う
<%= link_to("/likes/#{@post.id}/destroy", {method: "post"}) do %>
<span class="fa fa-heart liked-btn"></span>
<% end %>
いいね数を表示
- countメソッドは配列の要素数を取得するメソッドだが、テーブルのデータ数を取得するために利用することもできる
- Like.where.count(post_id: @post.id) と書かないことに注意。手順見ずにやっていて、ここで引っかかった。カッコは必ずしも最後にある訳ではなく、指定するメソッドごとにカッコを入れるんでしょう、多分。
def show
@post = Post.find_by(id: params[:id])
@user = @post.user
@likes_count=Like.where(post_id: @post.id).count
end
その人がいいねした投稿の一覧を表示
- 手順見ずに行けた!偉いぞ俺!
- ぐるぐる回る感じですが、頑張ったらなんとか理解できますね。
- これ以上複雑になったらきつい
def likes
@user=User.find_by(id: params[:id])
@likes=Like.where(user_id: @user.id)
end
<% @likes.each do |like| %>
<% post=Post.find_by(id: like.post_id) %>
<div class="posts-index-item">
<div class="post-left">
<img src="<%= "/user_images/#{post.user.image_name}" %>">
</div>
<div class="post-right">
<div class="post-user-name">
<%= link_to(post.user.name, "/users/#{post.user.id}") %>
</div>
<%= link_to(post.content, "/posts/#{post.id}") %>
</div>
</div>
<% end %>