予約完了画面に移行したい。
↓以下Gitソースコード
https://github.com/waszo/rsv_003/tree/develop
発生している問題・分からないこと
If room.image_roomが定義されていないと出ている問題
エラーメッセージ
error
1NoMethodError in Reservations#index
該当のソースコード
以下ソースコード
Reservations#index
<h2>予約済み一覧</h2> <table class="table"> <thead> <tr> <th>画像</th> <th>施設名</th> <th>紹介文</th> <th>合計料金</th> <th>チェックイン</th> <th>チェックアウト</th> <th>予約確定日時</th> </tr> </thead> <tbody> <% @reservations.each do |reservation| %> <tr> <td> <% room = reservation.room %> <% if room.image_room? %> <%= image_tag room.image_room.url, size: '80x80' %> <% else %> <%= image_tag 'defolt_room_image.png', size: '80x80' %> <% end %> </td> <td><%= room.name %></td> <td><%= room.description %> <td><%= (room.price * reservation.number_of_people * (reservation.finish_date - reservation.start_date)).to_i %> 円</td> <td><%= reservation.start_date.strftime("%Y/%m/%d") %></td> <td><%= reservation.finish_date.strftime("%Y/%m/%d") %></td> <td><%= reservation.created_at.strftime("%Y/%m/%d %H:%M") %></td> <td class="dropdown"> <button class="btn btn-Link dropdown-toggle" type="button" id="dropdownMenuButton<%= room.id %>" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false"> <img alt="3点メニューアイコン" src="https://rails-02-sample.herokuapp.com/assets/icons/three-dot-menu-0c042cde96cc73e058e97d09a24944eb2914eb8c152d418dc6fc6964251fdaa2.svg" class="dropdown-image"> </button> <div class="dropdown-menu" aria-labelledby="dropdownMenuButton<%= room.id %>"> <a class="dropdown-item" href="<%= edit_reservation_path(reservation) %>">編集</a> <a class="dropdown-item" href="<%= reservation_path(reservation) %>" data-method="delete" data-confirm="本当に削除しますか?">削除</a> </div> </td> </tr> <% end %> </tbody> </table>
class ReservationsController < ApplicationController def index @reservations = Reservation.includes(:room, :user).all # @reservations = Reservation.all end ```### 実現したいこと 以下エラーメッセージになります。 Started GET "/reservations/index" for ::1 at 2024-08-20 21:01:30 +0900 Processing by ReservationsController#index as HTML (0.0ms) SELECT sqlite_version(*) ↳ app/controllers/application_controller.rb:12:in `set_search' Rendering layout layouts/application.html.erb Rendering reservations/index.html.erb within layouts/application Reservation Load (0.8ms) SELECT "reservations".* FROM "reservations" ↳ app/views/reservations/index.html.erb:17 Room Load (0.0ms) SELECT "rooms".* FROM "rooms" WHERE "rooms"."id" = ? LIMIT ? [["id", 1], ["LIMIT", 1]] ↳ app/views/reservations/index.html.erb:20 Rendered reservations/index.html.erb within layouts/application (Duration: 5.2ms | Allocations: 7652) Rendered layout layouts/application.html.erb (Duration: 5.3ms | Allocations: 7730) Completed 500 Internal Server Error in 11ms (ActiveRecord: 1.1ms | Allocations: 12925) ActionView::Template::Error (undefined method `image_room?' for nil:NilClass): 18: <tr> 19: <td> 20: <% room = reservation.room %> 21: <% if room.image_room? %> 22: <%= image_tag room.image_room.url, size: '80x80' %> 23: <% else %> 24: <%= image_tag 'defolt_room_image.png', size: '80x80' %> app/views/reservations/index.html.erb:21 app/views/reservations/index.html.erb:17
特になし
### 試したこと・調べたこと - [x] teratailやGoogle等で検索した - [ ] ソースコードを自分なりに変更した - [ ] 知人に聞いた - [ ] その他 ##### 上記の詳細・結果 DBのの見直しやカラムが間違っていないかなどの確認を行なった。 ### 補足 https://github.com/waszo/rsv_003/tree/develop ![イメージ説明](https://ddjkaamml8q8x.cloudfront.net/questions/2024-08-19/7b0cd3c2-a3e7-47c6-b6e7-cc2d1d042501.png)
エラーが出ている Reservations#index のソースcodeを載せましょう。画像じゃなくtextで。
それと エラーメッセージは省略しないで全部だしてください。何行目になんという識別子が未定義なのか出てるはず
以下ソースコードです
Reservations#index
h2>予約済み一覧</h2>
<table class="table">
<thead>
<tr>
<th>画像</th>
<th>施設名</th>
<th>紹介文</th>
<th>合計料金</th>
<th>チェックイン</th>
<th>チェックアウト</th>
<th>予約確定日時</th>
</tr>
</thead>
<tbody>
<% @reservations.each do |reservation| %>
<tr>
<td>
<% room = reservation.room %>
<% if room.image_room? %>
<%= image_tag room.image_room.url, size: '80x80' %>
<% else %>
<%= image_tag 'defolt_room_image.png', size: '80x80' %>
<% end %>
</td>
<td><%= room.name %></td>
<td><%= room.description %>
<td><%= (room.price * reservation.number_of_people * (reservation.finish_date - reservation.start_date)).to_i %> 円</td>
<td><%= reservation.start_date.strftime("%Y/%m/%d") %></td>
<td><%= reservation.finish_date.strftime("%Y/%m/%d") %></td>
<td><%= reservation.created_at.strftime("%Y/%m/%d %H:%M") %></td>
<td class="dropdown">
<button class="btn btn-Link dropdown-toggle" type="button" id="dropdownMenuButton<%= room.id %>" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false">
<img alt="3点メニューアイコン" src="https://rails-02-sample.herokuapp.com/assets/icons/three-dot-menu-0c042cde96cc73e058e97d09a24944eb2914eb8c152d418dc6fc6964251fdaa2.svg" class="dropdown-image">
</button>
<div class="dropdown-menu" aria-labelledby="dropdownMenuButton<%= room.id %>">
<a class="dropdown-item" href="<%= edit_reservation_path(reservation) %>">編集</a>
<a class="dropdown-item" href="<%= reservation_path(reservation) %>" data-method="delete" data-confirm="本当に削除しますか?">削除</a>
</div>
</td>
</tr>
<% end %>
</tbody>
</table>
以下エラーメッセージになります。
Started GET "/reservations/index" for ::1 at 2024-08-20 21:01:30 +0900
Processing by ReservationsController#index as HTML
(0.0ms) SELECT sqlite_version(*)
↳ app/controllers/application_controller.rb:12:in `set_search'
Rendering layout layouts/application.html.erb
Rendering reservations/index.html.erb within layouts/application
Reservation Load (0.8ms) SELECT "reservations".* FROM "reservations"
↳ app/views/reservations/index.html.erb:17
Room Load (0.0ms) SELECT "rooms".* FROM "rooms" WHERE "rooms"."id" = ? LIMIT ? [["id", 1], ["LIMIT", 1]]
↳ app/views/reservations/index.html.erb:20
Rendered reservations/index.html.erb within layouts/application (Duration: 5.2ms | Allocations: 7652)
Rendered layout layouts/application.html.erb (Duration: 5.3ms | Allocations: 7730)
Completed 500 Internal Server Error in 11ms (ActiveRecord: 1.1ms | Allocations: 12925)
ActionView::Template::Error (undefined method `image_room?' for nil:NilClass):
18: <tr>
19: <td>
20: <% room = reservation.room %>
21: <% if room.image_room? %>
22: <%= image_tag room.image_room.url, size: '80x80' %>
23: <% else %>
24: <%= image_tag 'defolt_room_image.png', size: '80x80' %>
app/views/reservations/index.html.erb:21
app/views/reservations/index.html.erb:17
よろしくお願いいたします。
コメントではなく、質問本文に載せてください。
コメントだとインデントがなくなるので読みにくい
修正ありがとう。もう少し! 2つ
1. 質問を書く枠の上に </> のボタンが有ります。それを click すると出てくる ```(半角)逆クォーテーション)の間にソースを入れてください。手で ``` だけの行で囲むのでもできます。
2. index は controller のdef index を載せて欲しい。