現状、tweetに対していいねボタンは出ていて、押すと色が変わるところまではできているのですが、いいねボタンを押すと、tweet全てが反応して同じいいね数が表示されてしまいます。(数字が薄いですが、全部のtweetいいね数が6になっています。。。)
####1ついいねをしたらそのtweetだけにいいね数を増やせるようにしたいです。
どなたかお教えいただきたいです。
ruby
1# tweet_controller 2 3class TweetsController < ApplicationController 4 before_action :set_tweet, only: [:edit, :show] 5 before_action :move_to_index, except: [:index, :show, :search] 6 7 def index 8 @tweets = Tweet.includes(:user).order("created_at DESC").page(params[:page]).per(6) 9 @like = Like.new 10 @likes_count = Like.where(@tweet_id).count 11 end 12 13 def new 14 @tweet = Tweet.new 15 end 16 17 def create 18 Tweet.create(tweet_params) 19 end 20 21 def destroy 22 tweet = Tweet.find(params[:id]) 23 tweet.destroy 24 end 25 26 def edit 27 end 28 29 def update 30 tweet = Tweet.find(params[:id]) 31 tweet.update(tweet_params) 32 end 33 34 def show 35 @tweet = Tweet.find(params[:id]) 36 @comment = Comment.new 37 @comments = @tweet.comments.includes(:user) 38 @like = Like.new 39 end 40 41 def search 42 @tweets = Tweet.search(params[:keyword]) 43 end 44 45 46 private 47 def tweet_params 48 params.require(:tweet).permit(:image, :text, :item, :cook).merge(user_id: current_user.id) 49 end 50 51 def set_tweet 52 @tweet = Tweet.find(params[:id]) 53 end 54 55 def move_to_index 56 redirect_to action: :index unless user_signed_in? 57 end 58 59end 60 61 62
ruby
1 2# likes_controller 3 4class LikesController < ApplicationController 5 def index 6 @like_tweets = current_user.like_tweets 7 end 8 9 def create 10 like = Like.new #Likeクラスのインスタンスを作成 11 like.user_id = current_user.id #current_userのidを変数に代入 12 like.tweet_id = params[:tweet_id] 13 14 if like.save #likeが保存できているかどうかで条件分岐 15 redirect_to tweets_path, success: 'いいねしました' 16 else 17 redirect_to tweets_path, danger: 'いいねに失敗しました' 18 end 19 end 20 21 def destroy 22 @like = Like.find_by(user_id: current_user.id, tweet_id: params[:tweet_id]) 23 @like.destroy 24 redirect_to tweets_path, success: 'いいねを取り消しました' 25 end 26end
ruby
1 2# _tweet.htlm.erb 3 4 <div class="content_post" style="background-image: url(<%= tweet.image %>);"> 5 <div class="more"> 6 <span><%= image_tag 'arrow_top.png' %></span> 7 <ul class="more_list"> 8 <li> 9 <%= link_to '詳細', "/tweets/#{tweet.id}", method: :get %> 10 </li> 11 <% if user_signed_in? && current_user.id == tweet.user_id %> 12 <li> 13 <%= link_to '編集', "/tweets/#{tweet.id}/edit", method: :get %> 14 </li> 15 <li> 16 <%= link_to '削除', "/tweets/#{tweet.id}", method: :delete %> 17 </li> 18 <% end %> 19 </ul> 20 </div> 21 <%= simple_format(tweet.text) %> 22 <span class="name"> 23 <a href="/users/<%= tweet.user.id %>"> 24 <span>投稿者</span><%= tweet.user.nickname %> 25 </a> 26 </span> 27 <% unless user_signed_in? && current_user.likes.find_by(tweet_id: tweet.id) %> 28 <%= link_to tweet_likes_path(tweet), method: :post do %> 29 <i class="fa fa-heart like-btn" ></i> 30 <% end %> 31 <% else %> 32 <%= link_to tweet_like_path(tweet, current_user.likes.find_by(tweet_id: tweet.id)), method: :delete do %> 33 <i class="fa fa-heart unlike-btn"></i> 34 <% end %> 35 <% end %> 36 <%= @likes_count %> 37 </div>
ruby
1 2# routes.rb 3 4Rails.application.routes.draw do 5 6 devise_for :users 7 root to: 'tweets#index' 8 namespace :tweets do 9 resources :searches, only: :index 10 end 11 resources :tweets do 12 resources :likes, only: [:create, :destroy] 13 resources :comments, only: :create 14 end 15 resources :users, only: :show 16 17end 18
あなたの回答
tips
プレビュー