userとtweetとlikeを作成してます。
それぞれのコードは下記です。
tweets_controller
def index @tweets = Tweet.all end
views/tweets/index.html.erb
<p id="notice"><%= notice %></p> <h1>Tweets</h1> <table> <thead> <tr> <th>Title</th> <th>Content</th> <th colspan="3"></th> </tr> </thead> <tbody> <% @tweets.each do |tweet| %> <tr> <td><%= tweet.title %></td> <td><%= tweet.content %></td> <td><%= link_to 'Show', tweet %></td> <td><%= link_to 'Edit', edit_tweet_path(tweet) %></td> <td><%= link_to 'Destroy', tweet, method: :delete, data: { confirm: 'Are you sure?' } %></td> <td><%= render 'likes/like', tweet: tweet %></td> </tr> <% end %> </tbody> </table> <br> <%= link_to 'New Tweet', new_tweet_path %>
views/likes/_like.html.erb
<div id="like-link<%="#{tweet.id}"%>"> <% if current_user.like.find_by(tweet_id: tweet.id) %> <%= link_to 'いいね!を取り消す', tweet_likes_path(tweet_id: tweet.id), method: :delete, remote: true %> <% else %> <%= link_to 'いいね!', tweet_likes_path(tweet_id: tweet.id), method: :post, remote: true %> <% end %> </div>
likes_controller.rb
before_action :set_variables def create @like = Like.create(user_id: current_user.id, tweet_id: params[:tweet_id]) end def destroy like = Like.find_by(user_id: current_user.id, tweet_id: params[:tweet_id]) like.destroy end def set_variables @tweet = Tweet.find params[:tweet_id] @id_name = "#like-link#{@tweet.id}" end
create.js.erb
destroy.js.erb
$("<%= @id_name %>").html('<%= escape_javascript(render("like", tweet: @tweet)) %>');
保存や削除は出来てるんですけど、ページを更新しないと文字が切り替わらない状況で
非同期で「いいね」「いいねを取り消し」が出来るようにしたいのですが出来ないです。
どなたか分かる方がいれば教えてください。
お願いします。
あなたの回答
tips
プレビュー