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

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

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

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

Ruby on Rails 6

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

解決済

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

pure_dorayaki
pure_dorayaki

総合スコア6

Ruby

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

Ruby on Rails 6

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

1回答

0グッド

0クリップ

220閲覧

投稿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

以下のような質問にはグッドを送りましょう

  • 質問内容が明確
  • 自分も答えを知りたい
  • 質問者以外のユーザにも役立つ

グッドが多くついた質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

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

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

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

下記のような質問は推奨されていません。

  • 間違っている
  • 質問になっていない投稿
  • スパムや攻撃的な表現を用いた投稿

適切な質問に修正を依頼しましょう。

回答1

0

ベストアンサー

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

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

投稿2022/12/04 22:00

maisumakun

総合スコア141339

良いと思った回答にはグッドを送りましょう。
グッドが多くついた回答ほどページの上位に表示されるので、他の人が素晴らしい回答を見つけやすくなります。

下記のような回答は推奨されていません。

  • 間違っている回答
  • 質問の回答になっていない投稿
  • スパムや攻撃的な表現を用いた投稿

このような回答には修正を依頼しましょう。

回答へのコメント

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))%>"); ```

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

ただいまの回答率
86.12%

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

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

質問する

関連した質問

同じタグがついた質問を見る

Ruby

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

Ruby on Rails 6

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