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

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

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

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

Ruby on Rails 6

Ruby on Rails 6は、オープンソースのWebアプリケーションフレームワークです。「同じことを繰り返さない」というRailsの基本理念のもと、他のフレームワークより少ないコードで簡単に開発できるよう設計されています。

Q&A

解決済

1回答

517閲覧

変数が違うというエラーが出ましたが、どこが違うのか分かりません。

pure_dorayaki

総合スコア6

Ruby

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

Ruby on Rails 6

Ruby on Rails 6は、オープンソースのWebアプリケーションフレームワークです。「同じことを繰り返さない」というRailsの基本理念のもと、他のフレームワークより少ないコードで簡単に開発できるよう設計されています。

0グッド

0クリップ

投稿2022/12/04 16:08

前提

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

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

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

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

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

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

guest

回答1

0

ベストアンサー

エラー箇所のrender('visits/visit_button', restaurant: @restaurants))について、

そちらではなく、$('#js-visits-button-<% restaurant.id %>')restaurantが不明、ということなのではないでしょうか?

投稿2022/12/04 22:00

maisumakun

総合スコア145183

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

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

pure_dorayaki

2022/12/05 03:19

ご返信ありがとうございます! おっしゃる通りで、`$('#js-visits-button-<% restaurant.id %>')`のrestaurantの値は、コントローラーから来るということが、いまいち理解していないことに気づきました。 ありがとうございました。 ```create.js.erb $("#js-visits-button-<%= @restaurants.id %>").replaceWith("<%= j(render('visits/visit', restaurant: @restaurants))%>"); ```
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問