実現したいこと
ここに実現したいことを箇条書きで書いてください。
- Rails6にて非同期処理をしたい
前提
ここに質問の内容を詳しく書いてください。
Rails6にてlink_toでPOSTアクションやDELETEアクションのリクエストを送っている箇所がGETアクションでリクエストが送られる現象が発生した。
そのため、button_toに変更することによって、無事、正常なリクエストで送ることができた。
しかし、button_toにするとremote:trueオプションを追加してもContent-Type:がHTML形式で送られているため
JSファイルを表示せずエラーが発生する
発生している問題・エラーメッセージ
Ruby
1Started DELETE "/tweets/180/like" for 192.168.176.1 at 2023-06-22 00:37:14 +0000 2Cannot render console from 192.168.176.1! Allowed networks: 127.0.0.0/127.255.255.255, ::1 3Processing by LikesController#destroy as HTML 4 Parameters: {"authenticity_token"=>"[FILTERED]", "tweet_id"=>"180"} 5 Tweet Load (4.4ms) SELECT `tweets`.* FROM `tweets` WHERE `tweets`.`id` = 180 LIMIT 1 6 ↳ app/controllers/likes_controller.rb:8:in `destroy' 7 User Load (7.0ms) SELECT `users`.* FROM `users` WHERE `users`.`id` = 103 ORDER BY `users`.`id` ASC LIMIT 1 8 ↳ app/controllers/likes_controller.rb:9:in `destroy' 9 TRANSACTION (1.2ms) BEGIN 10 ↳ app/models/user.rb:36:in `unlike' 11 Like Destroy (4.3ms) DELETE FROM `likes` WHERE `likes`.`user_id` = 103 AND `likes`.`tweet_id` = 180 12 ↳ app/models/user.rb:36:in `unlike' 13 TRANSACTION (2.3ms) COMMIT 14 ↳ app/models/user.rb:36:in `unlike' 15Completed 406 Not Acceptable in 117ms (ActiveRecord: 23.6ms | Allocations: 6649) 16 17 18 19ActionController::UnknownFormat (LikesController#destroy is missing a template for this request format and variant. 20 21request.formats: ["text/html"] 22request.variant: []): 23
該当のコード
# app/views/tweets/_like.html.erb <%= button_to tweet_like_path(tweet), id: "like-botton-#{tweet.id}", remote: true do %> <i class="fa fa-heart-o m-l-xl"></i> <% end %>
# app/views/tweets/_unlike.html.erb <%= button_to tweet_like_path(tweet), id: "unlike-botton-#{tweet.id}", method: :delete, remote: true do %> <i class="fa fa-heart m-l-xl"></i> <%= tweet.liked_users.size %> <% end %>
# app/views/tweets/_likebotton.html.erb <% if tweet.liked_by?(current_user)%> <%= render "tweets/unlike", tweet: tweet, cached: true %> <% else %> <%= render "tweets/like", tweet: tweet, cached: true %> <% end %>
# app/views/tweets/_tweet.html.erb <div class="row justify-content-center"> <div class="col-lg-4"> <div class="card widget white-bg p-xl"> <ul class="list-unstyled m-t-sm"> <li> <%= image_tag tweet.user.image_url, class: 'img-sm m-r-sm'%> <h2><%= link_to tweet.user.name, other_mypage_path(tweet.user) %></h2> <% unless user_signed_in? %> <% else %> <%= render 'botton', tweet: tweet, cached: true if current_user.own?(tweet) %> <% end %> </li> <div class="m-t-lg"> <li> <%= link_to tweet.text, tweet_path(tweet), class: "click" %> </li> <li> <% if tweet.image.file.nil? %> <% else %> <%= image_tag tweet.image_url, size: '300x300'%> <% end %> </li> <li class="m-t-md"> <% unless user_signed_in? %> <% else%> <%= render 'likebotton', tweet: tweet, cached: true unless current_user.own?(tweet) %> <%= render 'commentbotton', tweet: tweet, cached: true unless current_user.own?(tweet) %> <% end %> </li> </div> </ul> </div> </div> </div>
# app/controllers/likes_controller.rb class LikesController < ApplicationController def create @tweet = Tweet.find(params[:tweet_id]) current_user.like(@tweet) end def destroy @tweet = Tweet.find(params[:tweet_id]) current_user.unlike(@tweet) end end
# app/javascript/packs/application.js import Rails from "@rails/ujs" import Turbolinks from "turbolinks" import * as ActiveStorage from "@rails/activestorage" import "channels" import 'inspinia-local/js/popper.min.js' import 'inspinia-local/js/jquery-3.1.1.min' import 'inspinia-local/js/bootstrap.min' import 'inspinia-local/js/jquery.jscroll.min.js' Rails.start() Turbolinks.start() ActiveStorage.start()
補足情報(FW/ツールのバージョンなど)
application.js内のturbolinkなどを削除しましたが、変化ありませんでした。

バッドをするには、ログインかつ
こちらの条件を満たす必要があります。