前提
いいね機能をajax通信でしたいのですが、
実装中に以下のエラーメッセージが発生しました。
( いいねではなく、行ったvisitsと名付けています。)
ActionController::UnknownFormat in VisitsController#destroy VisitsController#destroy is missing a template for this request format and variant. request.formats: ["text/html"] request.variant: []
テンプレートが無いと言われていますが、
・コントローラーのredirect_toを削除してある
・ビューファイルにvsits/destroy.js.erbがある
ので、他にどこを確認すれば良いのか分からないです。
該当のソースコード
ビュー user#show
rb
1 2 <% if @restaurants.any? %> 3 <% @restaurants.each do |restaurant| %> 4 <%= render 'restaurants/restaurant', restaurant: restaurant %> 5 → <%= render 'visits/visit_button', restaurant: restaurant %> 6 <% end %> 7 <% else %> 8 <p>まだ登録されていません</p> 9 <% end %>
_visit_button.rb
1 2 <% if current_user.visited?(restaurant) %> 3 <%= button_to '行った', restaurant_visits_path(restaurant.id), 4 id: "js-visits-button-#{restaurant.id}", 5 class: "btn btn-sm btn-secondary", 6 method: :delete, 7 remote: true %> 8 <% else %> 9 <%= button_to '行ってない', restaurant_visits_path(restaurant.id), 10 id: "js-visits-button-#{restaurant.id}", 11 class: "btn btn-sm btn-accent", 12 remote: true %> 13 <% end %>
Visitsコントローラー
rb
1class VisitsController < ApplicationController 2 def create 3 @restaurants = Restaurant.find(params[:restaurant_id]) 4 current_user.visit(@restaurants) 5 end 6 7 def destroy 8 @restaurants = Restaurant.find(params[:restaurant_id]) 9 current_user.unvisited(params[:restaurant_id]) 10 end 11end
jsファイル
visits#create.js.erb
visits#destroy.js.erb
js
1$('#js-visits-button-<% restaurant.id %>').html("<%= j(render 'visits/visit_button', restaurant: @restaurants ) %>");
gem 'jquery-rails'はインストールしてあります。
app/javascript/application.js
1import Rails from "@rails/ujs" 2import Turbolinks from "turbolinks" 3import * as ActiveStorage from "@rails/activestorage" 4import "channels" 5import "./restaurant" 6 7Rails.start() 8Turbolinks.start() 9ActiveStorage.start()
開発ツールで、ボタンはdata-remote-"true"
になっていることを確認しました。
jsファイルにパスが行っていると思っていますが、なぜか分かりません。
よろしくお願いいたします。
補足情報(FW/ツールのバージョンなど)
ruby 3.1.2
rails 6.1.6
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。