前提
ajax通信で、いいね機能の実装をしています。(いいねではなく、visit
にしています)
以下のエラーの原因が分かりません。
rb
1# ターミナル 2ActionView::Template::Error (undefined local variable or method `restaurant' for #<ActionView::Base:0x000000000103d8> 3Did you mean? @restaurants): 4 1: $('#js-visits-button-<% restaurant.id %>').html("<%= j(render('visits/visit_button', restaurant: @restaurants))%>");
該当のソースコード
以下の流れに沿って記載します。
① ビュー
② 部分ビューのbutton_to
、remote: true`記載
③コントローラー
④visits#createのjsファイル
(⑤ 部分ビューに飛ぶ )
▼views/users/show.html.erb
rb
1<p><%= "#{@user.name}のマイレストラン" %></p> 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 %>
▼views/visits/_visit_button.erb
rb
1 <% if current_user.visited?(restaurant) %> 2 <%= button_to '行った', restaurant_visits_path(restaurant.id), 3 id: "js-visits-button-#{restaurant.id}", 4 class: "btn btn-sm btn-secondary", 5 method: :delete, 6 remote: true %> 7 <% else %> 8 <%= button_to '行ってない', restaurant_visits_path(restaurant.id), 9 id: "js-visits-button-#{restaurant.id}", 10 class: "btn btn-sm btn-accent", 11 remote: true %> 12 <% end %> 13
▼controllers/visits_contoroller.rb
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
▼ views/visits/create.js.erb
js
1$('#js-visits-button-<% restaurant.id %>').html("<%= j(render('visits/visit_button', restaurant: @restaurants))%>");
エラー箇所のrender('visits/visit_button', restaurant: @restaurants))
について、
部分ビューでrestaurant
を使っている。
restaurant
の中身はコントローラーで設定した@restaurants
となる。
だと考えていて、自分で間違え箇所を見つけることができなかったので、助けて頂きたいです。
補足情報(FW/ツールのバージョンなど)
ruby 3.1.2
rails 6.1.6
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2022/12/05 03:19