※本サイトで紹介している商品・サービス等の外部リンクには、アフィリエイト広告が含まれる場合があります。
「いいね」を解除する
前回は記事に「いいね」できるようになった
今回は「いいね」を解除できるようにする
config/routes.rbを開く
resource :like, only: [:create, :destroy]
app/controllers/likes_controller.rbを開く
def destroy
article = Article.find(params[:article_id])
like = article.likes.find_by!(user_id: current_user.id)
like.destroy!
redirect_to article_path(article)
end
- 該当の
article_id
の記事を探してくる user_id
がcurrent_user.id
の「いいね」を絶対探してくるfind_by!
- 「いいね」は絶対
destroy!
する - 「いいね」ができたら同じ画面
article_path
にredirect_to
する
app/views/articles/show.html.hamlを開く
- if user_signed_in?
- if current_user.has_liked?(@article)
.article_heart
= link_to article_like_path(@article), data: { method: 'delete' } do
= image_tag 'heart-active.svg'
- else
.article_heart
= link_to article_like_path(@article), data: { method: 'post' } do
= image_tag 'heart.svg'
- もしログインユーザーが「いいね」していたら?(
user_signed_in?
)
→ ’heart-active.svg’が表示される - 「いいね」していなかったら?(
else
)
→ ’heart.svg’が表示される /articles/:article_id/like
に:article_id
が含まれている
→@article
をarticle_like_path
に渡すlink_to
はデフォルトが「GET」リクエスト
→ それ以外のときはdata: { method: 'delete' }
もしくは'post'
のように書く
resourceにする理由
削除するときにresource
のほうが都合が良い
resources :likes
複数形にした場合
- article_idの他に、likeのidも必要になってしまう
- 1つの記事に同じユーザーが「いいね」できるのは1回なので、likeのidは不要である
- likeのidを指定して削除できると、違うidも指定して削除できちゃう
likeのidを探して削除する
current_userが「いいね」した中から探して削除する
#DAY25