質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Ruby

Rubyはプログラミング言語のひとつで、オープンソース、オブジェクト指向のプログラミング開発に対応しています。

Ruby on Rails 7

Ruby on Rails 7は、2021年12月に正式リリースされました。Ruby on Railsのバージョン7であり、フロントエンド開発環境を大幅に刷新。Node.jsを用いない構成がデフォルトになっています。

Q&A

1回答

751閲覧

Railsでいいねの非同期通信ができない

Shmupeiii

総合スコア105

Ruby

Rubyはプログラミング言語のひとつで、オープンソース、オブジェクト指向のプログラミング開発に対応しています。

Ruby on Rails 7

Ruby on Rails 7は、2021年12月に正式リリースされました。Ruby on Railsのバージョン7であり、フロントエンド開発環境を大幅に刷新。Node.jsを用いない構成がデフォルトになっています。

0グッド

0クリップ

投稿2022/08/19 14:04

前提

現在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/ツールのバージョンなど)

ここにより詳細な情報を記載してください。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

多分 button_to 'いいね', board_likes_path(@board) ここで出てますね。

def create @like = @current_user.likes.create!(board_id: params[:board_id]) #いいねを現在のユーザーで作る end

とここで @board が作られていないために @boardがnilになっています。

投稿2022/08/20 00:26

winterboum

総合スコア23347

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問