前提
現在Railsで掲示板サイトを制作しています。
https://github.com/takoyan33/hokuseikeiziban
参考記事
実現したいこと
現在のいいね機能を非同期通信にしたいと考えています。
しかし、エラーが出てしまい、上手く実現できていません。
リロードするといいね機能自体は反映されているので、
JSの問題という感じでしょうか。分かる方がいればよろしくお願いします。
https://rails-docker-portfolio2.herokuapp.com/
発生している問題・エラーメッセージ
web_1 | Started POST "/boards/19/likes" for 172.20.0.1 at 2022-08-19 14:03:01 +0000 web_1 | Cannot render console from 172.20.0.1! Allowed networks: 127.0.0.0/127.255.255.255, ::1 web_1 | Processing by LikesController#create as JS web_1 | Parameters: web_1 | { web_1 | "authenticity_token" => "[FILTERED]", web_1 | "board_id" => "19" web_1 | } web_1 | User Load (2.2ms) web_1 | SELECT web_1 | `users`. * web_1 | FROM web_1 | `users` web_1 | WHERE web_1 | `users`.`id` = 6 LIMIT 1 web_1 | ? app/controllers/application_controller.rb:16:in `current_user' web_1 | TRANSACTION (1.2ms) web_1 | BEGIN web_1 | ? app/controllers/likes_controller.rb:3:in `create' web_1 | Board Load (2.1ms) web_1 | SELECT web_1 | `boards`. * web_1 | FROM web_1 | `boards` web_1 | WHERE web_1 | `boards`.`id` = 19 LIMIT 1 web_1 | ? app/controllers/likes_controller.rb:3:in `create' web_1 | Like Exists? (1.9ms) web_1 | SELECT web_1 | 1 AS one web_1 | FROM web_1 | `likes` web_1 | WHERE web_1 | `likes`.`board_id` = 19 web_1 | AND `likes`.`user_id` = 6 LIMIT 1 web_1 | ? app/controllers/likes_controller.rb:3:in `create' web_1 | Like Create (11.7ms) web_1 | INSERT web_1 | INTO web_1 | `likes` ( web_1 | `board_id` web_1 | ,`user_id` web_1 | ,`created_at` web_1 | ,`updated_at` web_1 | ) web_1 | VALUES ( web_1 | 19 web_1 | ,6 web_1 | ,'2022-08-19 14:03:01.422651' web_1 | ,'2022-08-19 14:03:01.422651' web_1 | ) web_1 | ? app/controllers/likes_controller.rb:3:in `create' web_1 | TRANSACTION (13.9ms) web_1 | COMMIT web_1 | ? app/controllers/likes_controller.rb:3:in `create' web_1 | Rendering likes/create.js.erb web_1 | Rendered likes/_like.html.erb (Duration: 13.8ms | Allocations: 2096) web_1 | Rendered likes/create.js.erb (Duration: 23.0ms | Allocations: 2431) web_1 | Completed 500 Internal Server Error in 119ms (ActiveRecord: 33.0ms | Allocations: 49814) web_1 | ActionView::Template::Error (undefined method `id' for nil:NilClass): web_1 | 1: <% if @current_user %> web_1 | 2: <% if @current_user.already_liked?(@board) %> web_1 | 3: <%= button_to '????????', board_like_path(@board), method: :delete , remote: true , id: "js-favorite-button-for-board-19" %> web_1 | 4: <p><i class="fa fa-heart" aria-hidden="true"></i>?????: <%= @board.likes.count %></p> web_1 | 5: <% else %> web_1 | web_1 | app/models/user.rb:28:in `already_liked?' web_1 | app/views/likes/_like.html.erb:2 web_1 | app/views/likes/create.js.erb:1
該当のソースコード
ruby
1#likes/_like.html.erb 2 3<% if @current_user %> 4<% if @current_user.already_liked?(@board) %> 5 <%= button_to 'いいねを取り消す', board_like_path(@board), method: :delete , remote: true , id: "js-favorite-button-for-board-19" %> 6 <p><i class="fa fa-heart" aria-hidden="true"></i> いいね数: <%= @board.likes.count %></p> 7<% else %> 8 <%= button_to 'いいね', board_likes_path(@board) , remote: true, id: "js-favorite-button-for-board-19" %> 9 <br> 10 <p><i class="fa fa-heart" aria-hidden="true"></i> いいね数: <%= @board.likes.count %></p> 11<% end %> 12<% else %> 13<p>ログインするといいねできます。</p> 14<% end %>
likes/Create.js.erb
1$("#js-favorite-button-for-board-19").html("<%= j(render partial: 'likes/like', locals: {board: @board}) %>"); 2
#_board.html.erb <div class="card"> <div class="card-header"> <h4><%= board.title %></h4> <% board.tags.each do |tag| %> <span class="badge badge-primary"><%= tag.name %></span> <%# link_to '削除', board, class: 'btn btn-outline-dark', method: :delete %> <% end %> </div> <div class="card-body"> <p class="card-text"><%= simple_format(board.body) %></p> <p><%= image_tag board.image, class: "width-max" if board.image.attached? %></p> <p class="text-right font-weight-bold mr-10"><%= board.name %></p> <% if @current_user == board.user %> <p><%= link_to '削除', board, class: 'btn btn-outline-dark', method: :delete %></p> <% else %> <% end %> <br /> <br /> <% if board.user.image? %> <%= image_tag board.user.image.url, class:"img-thumbnail", style:" width: 100px; height: 100px; object-fit: cover; border-radius: 50%;" %> <% else %> <%= image_tag "noimage.png", class:"img-thumbnail", style:" width: 100px; height: 100px; object-fit: cover; border-radius: 50%;"; %> <% end %> <p>投稿者名 <%= @board.user.name %> </p> <p><%= link_to '投稿者のプロフィール', user_path(board.user_id), class: 'btn btn-outline-dark' %></p> <%= render 'likes/like' %> #省略
class LikesController < ApplicationController def create @like = @current_user.likes.create!(board_id: params[:board_id]) #いいねを現在のユーザーで作る end def destroy @like = Like.find_by(board_id: params[:board_id], user_id: @current_user.id) @like.destroy end end
試したこと
ここに問題に対して試したことを記載してください。
補足情報(FW/ツールのバージョンなど)
ここにより詳細な情報を記載してください。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。