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

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

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

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

Ruby on Rails 6

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

Ruby on Rails

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

Q&A

1回答

303閲覧

railsで作成している宿泊アプリで予約完了画面に移行せず、エラーが出てしまう点。

aramocya

総合スコア1

Ruby

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

Ruby on Rails 6

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

Ruby on Rails

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

0グッド

0クリップ

投稿2024/08/19 14:24

編集2024/08/23 15:36

予約完了画面に移行したい。
↓以下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)

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

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

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

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

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

winterboum

2024/08/20 00:16 編集

エラーが出ている Reservations#index のソースcodeを載せましょう。画像じゃなくtextで。 それと エラーメッセージは省略しないで全部だしてください。何行目になんという識別子が未定義なのか出てるはず
aramocya

2024/08/20 12:01

以下ソースコードです 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 よろしくお願いいたします。
winterboum

2024/08/20 12:37

コメントではなく、質問本文に載せてください。 コメントだとインデントがなくなるので読みにくい
winterboum

2024/08/21 00:12

修正ありがとう。もう少し! 2つ 1. 質問を書く枠の上に </> のボタンが有ります。それを click すると出てくる ```(半角)逆クォーテーション)の間にソースを入れてください。手で ``` だけの行で囲むのでもできます。 2. index は controller のdef index を載せて欲しい。
guest

回答1

0

エラーは undefined method 'image_room?' for nil:NilClass と言ってます。何行目かが出ていないけど 21行目でしょう。するとroom がnilだってことです
ということは 20行目の room = reservation.room からみて、
roomが紐ついていない reservationがある
ということです。
テストしている時にそういう非正規なreservationができてしまったということでしょう。
rails console で Reservation を調査してみましょう。数少ないだろうから。。

reservation_without_room = Reservation.all .select{|reservation| reservation.room.nil?}

として reservation_without_room が有るか無いか観てみましょう。
有ったら、削除しても良いようなデータだったら削除。

投稿2024/08/21 00:21

winterboum

総合スコア23520

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

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

winterboum

2024/08/24 00:17

やっぱり 21行目ですね。 解答欄に書いた DB の確認してください
aramocya

2024/08/25 12:37

回答いただきありがとうございます。 大変申し訳ないのですが、DBの確認としてコードが書かれておりますが、 確認はどうやって行うものでしょうか。 reservation_without_room = Reservation.all .select{|reservation| reservation.room.nil?} に書かれたコードをコントローラーかどこかに入力するものでしょうか。 よろしくお願いいたしますl。
winterboum

2024/08/25 22:52

ターミナル で rails console と入力して立ち上げ、そこに入力してください
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

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

ただいまの回答率
85.39%

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

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

質問する

関連した質問