Rails歴一ヶ月の初心者です。
いいね機能を非同期通信で実装しようと、以下の記事を見ながら実装してみましたが、
リロードをしないと反映されない状態になっています。(つまり、jQueryが反映されません。)
リロードすると正常に動くきますので、モデルやアソシエーション、コントローラー
は正常に動いていると仮定しています。
大変お手数をおかけしますが、教えていただけると幸いです。
#####likes.controller.rb
class LikesController < ApplicationController before_action :set_post def create @like = Like.create(user_id: current_user.id, post_id: @post.id) end def destroy @like = Like.find_by(user_id: current_user.id, post_id: @post.id) @like.destroy end private def set_post @post = Post.find(params[:post_id]) end end
#####(いいね機能を実装したいビュー)必要箇所のみ抜粋
.element#like{data: {like: {id: @post.id}}} = render "like"
#####like.html.haml(上のコードのrender先)
- if Like.find_by(user_id: current_user.id, post_id: @post.id) = link_to "/posts/#{@post.id}/likes/#{@post.likes.ids}", method: :delete, class: "element", remote: true do = icon("fas", "heart", class: "like") - else = link_to "/posts/#{@post.id}/likes", method: :post, class: "element", remote: true do = icon("fas", "heart", class: "unlike") .count = @post.likes.length
#####views/likes/create.js.erb
$("#like-<%= @post.id %>").html("<%= j(render 'posts/like') %>");
#####views/likes/destroy.js.erb
$("#like-<%= @post.id %>").html("<%= j(render 'posts/like') %>");
参考にしたサイト
https://qiita.com/fumikao/items/373caa60b77f27f2dbdd
バージョン
rails (5.0.7.2)
jquery-rails (4.3.5)
検証
・現在、chromeの検証機能で確認をしてもエラーが発生していない状態
・ターミナルのrails sで出てくる情報にもエラーが出ていない状態
・create.js.erbをわざと間違えで記載するとエラーが発生することから、jsに「反映されていない」ではなく「記載に誤りがない」と考えられる。
・turbolinks関連の記載は削除済
仮説(5/12追加)
create.js.erbの記載の前(一番最初の行)をdebuggerで検証すると、
$("#like-1").html("<div class=\'icon_count\'>\n<a data-remote=\"true\" rel=\"nofollow\" data-method=\"delete\" href=\"/posts/1/likes/[56]\"><i class=\"fas fa-heart like\"></i>\n</a></div>\n");
このような記載が表示されます。
しっかり値が送られてきているので、やはり記載に誤りは無いかと思うのですが、
rel="nofollow" の部分がどうにも気になります。
もし、ajaxが発火しない理由がわかる方がいらっしゃいましたら、教えてください。
回答1件
あなたの回答
tips
プレビュー