前提・実現したいこと
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
回答2件
あなたの回答
tips
プレビュー