わからないこと
こちらのサイトではajax を用いて非同期通信を行う際に remote: true に加えて app/views/likes/create.js.erb ファイルなるものを作成し、その中にJSのコードをかく?とういうことをして remote: true の非同期通信を可能にしているみたいですが。
<%= link_to("/likes/#{@post.id}/create", method: "post", remote: true ) do %> <i class="fas fa-thumbs-up"></i> class LikesController < ApplicationController before_action :authenticate_user def create @like = Like.new( user_id: @current_user.id, post_id: params[:post_id] ) @like.save redirect_to("/posts/#{params[:post_id]}") end end
自分のコードではhtml に remote: true と書くだけでも非同期通信はできるのですがこれはローカルだからでしょうか?本番環境で実行しようとするとうまくいかないのでしょうか? ajax での非同期通信については昨日知ったばかりなので詳しいことはまだわかりませんが remote: true とだけ書くことで実行可能なのでしょうか?
やったこと
posts#show <div id="likes_buttons_<%= @post.id %>"> <i class="fas fa-bookmark"></i> <%= render partial: 'likes/like', locals: { post: @post, likes: @likes} %> </div>
_like.html.erb <% if @post.user_id != @current_user.id %> <% if Like.find_by(user_id: @current_user.id, post_id: @post.id)%> <%= link_to("/likes/#{@post.id}/destroy", method: "post", remote: true) do %> <i class="fas fa-bookmark unclip"></i> <% end %> <% else %> <%= link_to("/likes/#{@post.id}/create", method: "post", remote: true ) do %> <i class="fas fa-bookmark"></i> <% end %> <% end %> <%= Like.where(post_id: @post.id).count %> 回答: <%= Answer.where(post_id: @post.id).count %>件 <% else %> <i class="fas fa-bookmark"></i> <%= Like.where(post_id: @post.id).count %> 回答: <%= Answer.where(post_id: @post.id).count %>件 <% end %>
create.js.erb $('#likes_buttons_<%= @post.id %>').html("<%= j(render partial: 'likes/like', locals: {post: @post}) %>");
回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2020/08/06 02:14
2020/08/06 02:18
2020/08/06 02:47
2020/08/06 02:58
2020/08/06 03:27