前提・実現したいこと
現在railsの学習にてモデルのリレーションの実装を行なっています。
具体的には、user.rbとreserver.rbの二つなのですがユーザーのテーブルとホテルの予約のテーブルを紐付けたいと考えています。
しかし、予約の開始日や終了日等の入力を行い予約完了ボタンを押した際に処理が行えません。
エラーメッセージから外部キーが恐らく設定がうまくいっていないことは理解できるのですが。
どなたか回答の方よろしくお願いします。
発生している問題・エラーメッセージ
NoMethodError in Reservers#new undefined method `id' for nil:NilClass
該当のソースコード
rails
1class ReserversController < ApplicationController 2 def index 3 @reservers = Reserver.all 4 end 5 6 def new 7 @reserver = Reserver.new 8 end 9 10 def create 11 @reserver = Reserver.find(params[:id]) 12 @reserver = Reserver.new(params.require(:reserver).permit(:start, :end, :number, :total, :user_id)) 13 if @reserver.save 14 flash[:notice] = "新規予約をしました" 15 redirect_to :index 16 else 17 render :new 18 end 19 end 20 21 def show 22 end 23 24 def edit 25 end 26 27 def update 28 end 29 30 def destroy 31 end 32end
rails
1#reserver/new.html.erbです。 2<h3>新規予約</h3> 3 4 <%= form_for @reserver do |f| %> 5 <table> 6 <tr> 7 <th><%= f.label :開始日 %></th> 8 <td><%= f.date_field :start, class:"start-content" %></td> 9 </tr> 10 11 <tr> 12 <th><%= f.label :終了日 %></th> 13 <td><%= f.date_field :end, class:"end-content" %></td> 14 </tr> 15 16 <tr> 17 <th><%= f.label :人数 %></th> 18 <td><%= f.number_field :number, class:"number-content" %></td> 19 </tr> 20 </table> 21 <%= f.hidden_field :user_id, value: @user.id %> 22 <div> 23 <ul> 24 <li><%= f.submit "予約を完了する" %></li> 25 </ul> 26 </div> 27 <% end %> 28 29 <div> 30 <ul> 31 <li><%= link_to "予約一覧に戻る", :reservers %></li> 32 </ul> 33 </div>
試したこと
binding.pryをdef createの箇所で記述し確認したところstart.end.numberにデータが入っていましたが
curren_userにはデータが存在していませんでした。
補足情報(FW/ツールのバージョンなど)
また、reserver/new.html.erbのコードの内容を
<%= f.hidden_field :current_user, value: @current_user %>
と記述しているためにbinding.pryを行った際にuser_idではなくcurrent_userと出ているのでしょうか?
この場合user_idからcurrent_userにreserverのカラム名を変更すべきでしょうか?
回答1件
あなたの回答
tips
プレビュー