前提・実現したいこと
reservers/new.html.erbで定義した
<%= f.hidden_field :greenhouse_id, :value => @greenhouse.id %>
をdef createの箇所で受け取りたいがコントローラーの記述の仕方がわからないです。
greenhouseモデルとreserverモデルは1:1で紐付けられておりreserverの方でgreenhouseのidを受け取りたいと考えています。
発生している問題・エラーメッセージ
NoMethodError in Reservers#create undefined method `id' for nil:NilClass Request Parameters: {"authenticity_token"=>"[FILTERED]", "reserver"=>{"user_id"=>"1", "greenhouse_id"=>"1", "start"=>"2021-07-16", "end"=>"2021-07-17", "number"=>"1"}, "commit"=>"予約を完了する"}
該当のソースコード
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 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
試したこと
def createの箇所に@greenhouse = Greenouse.find(params[:id])を記述し、エラーのundefind~を解消できると考えやってみましたがダメでした。
また、def create内の@reserverの下でbinding.pryのparamsで確認したところgreenhouse_idとしてid自体は渡せていることは確認できました。
補足情報(FW/ツールのバージョンなど)
aws cloud9
rails 6.1
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。