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

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

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

Oracle Databaseは、米オラクルが開発・販売を行うリレーショナルデータベース管理システムです。

Ruby on Rails 6

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

Ruby on Rails

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

データベース

データベースとは、データの集合体を指します。また、そのデータの集合体の共用を可能にするシステムの意味を含めます

DB2

DB2(IBM Database2)は、IBMのリレーショナルデータベース管理システム製品です。 UNIXとWindows、IBM社のメインフレームOS用が用意されており、 幅広いプラットフォームに対応しています。

Q&A

解決済

2回答

1136閲覧

Couldn't find Greenhouse without an IDについて

Engineer_traine

総合スコア17

Oracle Database

Oracle Databaseは、米オラクルが開発・販売を行うリレーショナルデータベース管理システムです。

Ruby on Rails 6

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

Ruby on Rails

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

データベース

データベースとは、データの集合体を指します。また、そのデータの集合体の共用を可能にするシステムの意味を含めます

DB2

DB2(IBM Database2)は、IBMのリレーショナルデータベース管理システム製品です。 UNIXとWindows、IBM社のメインフレームOS用が用意されており、 幅広いプラットフォームに対応しています。

0グッド

0クリップ

投稿2021/07/14 13:15

編集2021/07/15 00:15

前提・実現したいこと

reserverモデル(予約機能)を機能させてdbに保存したい。
createアクションが正常に実行できずエラーが発生している状態です。
エラーが発生する前にreserverモデルとgreenhouseモデルを紐付け、imageやprice等を受け渡しを実装後、処理が機能しなくなりました。
受け渡し前はしっかり機能しておりcreateアクションが成功しindexの箇所に表示できておりました。
def createの箇所でなぜ@greenhouseが引っ掛かるのかわかりません。
@greenhouseに関してはdbに保存しようとしていないのですが。

発生している問題・エラーメッセージ

ActiveRecord::RecordNotFound in ReserversController#create Couldn't find Greenhouse without an ID request parameters {"authenticity_token"=>"[FILTERED]", "reserver"=>{"start"=>"2021-07-14", "end"=>"2021-07-15", "number"=>"1"}, "commit"=>"予約を完了する"}

該当のソースコード

rails

1<h3>新規予約</h3> 2   3  <%= render "shared/error", obj: @reserver %> 4 5 <%= form_for @reserver do |f| %> 6 <table class = "reserver_table" > 7 <tr> 8 <th>サンプルイメージ</th> 9 <td class = "room_sample"> 10 <%= image_tag @greenhouse.image %>#この箇所にマークがついております。 11 </td> 12 </tr> 13 14 <tr> 15 <th>料金</th> 16 <td><%= @greenhouse.price %>/円</td> 17 </tr> 18 <tr> 19 <th><%= f.label :開始日 %></th> 20 <td><%= f.date_field :start, class:"start-content" %></td> 21 </tr> 22 23 <tr> 24 <th><%= f.label :終了日 %></th> 25 <td><%= f.date_field :end, class:"end-content" %></td> 26 </tr> 27 28 <tr> 29 <th><%= f.label :人数 %></th> 30 <td><%= f.number_field :number, class:"number-content" %></td> 31 </tr> 32 </table> 33 <div> 34 <ul> 35 <li><%= f.submit "予約を完了する" %></li> 36 </ul> 37 </div> 38 <% end %> 39   40 <div> 41 <ul> 42 <li><%= link_to "予約一覧に戻る", :reservers %></li> 43 </ul> 44 </div>

rails

1class ReserversController < ApplicationController 2 def index 3 @reservers = Reserver.all 4 end 5 6 def new 7 @reserver = Reserver.new 8 @greenhouse = Greenhouse.find(params[:format]) 9 end 10 11 def create 12 @reserver = Reserver.new(params.require(:reserver).permit(:start, :end, :number, :total, :user_id)) 13 @greenhouse = Greenhouse.find(params[:format]) 14 if @reserver.save 15 flash[:notice] = "新規予約をしました" 16 redirect_to action: :index 17 else 18 render :new 19 end 20 end 21 22 def show 23 @reserver = Reserver.find(params[:id]) 24 end 25 26 def edit 27 @reserver = Reserver.find(params[:id]) 28 end 29 30 def update 31 @reserver = Reserver.find(params[:id]) 32 if @reserver.update(params.require(:reserver).permit(:start, :end, :number, :total, :user_id)) 33 flash[:notice] = "投稿を更新しました" 34 redirect_to :reservers 35 else 36 render "edit" 37 end 38 end 39 40 def destroy 41 @reserver = Reserver.find(params[:id]) 42 @reserver.destroy 43 flash[:notice] = "投稿を削除しました" 44 redirect_to :reservers 45 end 46end

試したこと

調べたところ、each文の変数に@reserverが使われていてるのに@greenhouseというものを設定しているからのような気がし、reserver.@greenhouse.imageに変更しましたが、エラーは出た状態でした。
全体的に問題の箇所をeach文に合わせるような形に書き直すのでしょうか?

補足情報(FW/ツールのバージョンなど)

aws cloud9
rails 6.1

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

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

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

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

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

mather

2021/07/14 14:22

controllerのコードはどうなっていますか?
guest

回答2

0

自己解決

binding.pryで値が入力されているか確認した所入っていないことを確認できたため
greenhouse_idをnew.html.erbに追加し、外部キーとしてあとからreserverに持たせることによって
greenhouseのidを持たすことができました。

投稿2021/07/19 04:39

Engineer_traine

総合スコア17

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

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

0

def create 内の以下の部分でエラーが起こっているようですね。

ruby

1@greenhouse = Greenhouse.find(params[:format])

params[:format] はリクエストパラメータには含まれていないようですし、 @greenhouse も取得するだけで使われていないように見受けられますが、なぜこのようなコードを書いたのでしょうか?

投稿2021/07/15 08:24

mather

総合スコア6753

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

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

Engineer_traine

2021/07/15 08:43

回答ありがとうございます。 現在出ているエラーの前に NoMethodError in Reservers#create undefined method `image' for nil:NilClass とエラーが出ていたので@greenhouseをdef createの箇所にも記述するのかと考えました。
mather

2021/07/15 08:57

それはおそらくページのレンダリングを行ったときに `@greenhouse` が `nil` になっているため発生しています。 `format` というパラメータがなにか、 `greenhouse` が何かという細かい箇所がわからないのでアドバイスしにくいですが、 `@greenhouse` を正しく取得する方法がわからないのであれば、テンプレートから `@greenhouse` を参照している部分を削除して、必要になったら参照方法も含め考えてみてください。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問