前提・実現したいこと
購入機能でエラーメッセージを表示させようと
<%= render 'shared/error_messages', model: f.object %>
をindex.html.erbに追加したところ購入画面(index.html.erb)に遷移することもできなくなり、エラーが起きてしまいます。
f.objectが空だからエラーが起きていると想定は出来るのですがどうすればいいか分からないでいます。よろしければご教授お願い致します。
発生している問題・エラーメッセージ
views/orders/index.html.erb
NoMethodError in Orders#index Showing /Users/tattobu/projects/furima-36479/app/views/shared/_error_messages.html.erb where line #1 raised: undefined method `errors' for nil:NilClass Extracted source (around line #1): <% if model.errors.any? %> <div class="error-alert"> <ul> <% model.errors.full_messages.each do |message| %> <li class='error-message'><%= message %></li> <% end %> Trace of template inclusion: #<ActionView::Template app/views/orders/index.html.erb locals=[]> Rails.root: /Users/tattobu/projects/furima-36479 Application Trace | Framework Trace | Full Trace app/views/shared/_error_messages.html.erb:1 app/views/orders/index.html.erb:36 app/views/orders/index.html.erb:34 Request Parameters: {"item_id"=>"8"}
該当のソースコード
ruby
1<%= render "shared/second-header"%> 2 3<div class='transaction-contents'> 4 <div class='transaction-main'> 5 <h1 class='transaction-title-text'> 6 購入内容の確認 7 </h1> 8 <%# 購入内容の表示 %> 9 <div class='buy-item-info'> 10 <%= image_tag @item.image, class: 'buy-item-img' %> 11 <div class='buy-item-right-content'> 12 <h2 class='buy-item-text'> 13 <%= @item.name %> 14 </h2> 15 <div class='buy-item-price'> 16 <p class='item-price-text'>¥<%= @item.price %></p> 17 <p class='item-price-sub-text'><%= @item.shipping_fee_status.name %></p> 18 </div> 19 </div> 20 </div> 21 <%# /購入内容の表示 %> 22 23 <%# 支払額の表示 %> 24 <div class='item-payment'> 25 <h1 class='item-payment-title'> 26 支払金額 27 </h1> 28 <p class='item-payment-price'> 29 ¥<%= @item.price %> 30 </p> 31 </div> 32 <%# /支払額の表示 %> 33 34 <%= form_with url: item_orders_path, model: @cart_address, id: 'charge-form', class: 'transaction-form-wrap',local: true do |f| %> 35 36 <%= render 'shared/error_messages', model: f.object %> 37 38 <%# カード情報の入力 %> 39 <div class='credit-card-form'> 40 <h1 class='info-input-haedline'> 41 クレジットカード情報入力 42 </h1> 43 <div class="form-group"> 44 <div class='form-text-wrap'> 45 <label class="form-text">カード情報</label> 46 <span class="indispensable">必須</span> 47 </div> 48 <%= f.text_field :card_number, class:"input-default", id:"card-number", placeholder:"カード番号(半角英数字)", maxlength:"16" %> 49 <div class='available-card'> 50 <%= image_tag 'card-visa.gif', class: 'card-logo'%> 51 <%= image_tag 'card-mastercard.gif', class: 'card-logo'%> 52 <%= image_tag 'card-jcb.gif', class: 'card-logo'%> 53 <%= image_tag 'card-amex.gif', class: 'card-logo'%> 54 </div> 55 </div> 56 <div class="form-group"> 57 <div class='form-text-wrap'> 58 <label class="form-text">有効期限</label> 59 <span class="indispensable">必須</span> 60 </div> 61 <div class='input-expiration-date-wrap'> 62 <%= f.text_area :exp_month, class:"input-expiration-date", id:"card-exp-month", placeholder:"例)3" %> 63 <p>月</p> 64 <%= f.text_area :exp_year, class:"input-expiration-date", id:"card-exp-year", placeholder:"例)23" %> 65 <p>年</p> 66 </div> 67 </div> 68 <div class="form-group"> 69 <div class='form-text-wrap'> 70 <label class="form-text">セキュリティコード</label> 71 <span class="indispensable">必須</span> 72 </div> 73 <%= f.text_field :cvc, class:"input-default", id:"card-cvc", placeholder:"カード背面4桁もしくは3桁の番号", maxlength:"4" %> 74 </div> 75 </div> 76 <%# /カード情報の入力 %> 77 78 <%# 配送先の入力 %> 79 <div class='shipping-address-form'> 80 <h1 class='info-input-haedline'> 81 配送先入力 82 </h1> 83 <div class="form-group"> 84 <div class='form-text-wrap'> 85 <label class="form-text">郵便番号</label> 86 <span class="indispensable">必須</span> 87 </div> 88 <%= f.text_field :postal_code, class:"input-default", id:"postal-code", placeholder:"例)123-4567", maxlength:"8" %> 89 </div> 90 <div class="form-group"> 91 <div class='form-text-wrap'> 92 <label class="form-text">都道府県</label> 93 <span class="indispensable">必須</span> 94 </div> 95 <%= f.collection_select(:prefecture_id, Prefecture.all, :id, :name, {}, {class:"select-box", id:"prefecture"}) %> 96 </div> 97 <div class="form-group"> 98 <div class='form-text-wrap'> 99 <label class="form-text">市区町村</label> 100 <span class="indispensable">必須</span> 101 </div> 102 <%= f.text_field :city, class:"input-default", id:"city", placeholder:"例)横浜市緑区"%> 103 </div> 104 <div class="form-group"> 105 <div class='form-text-wrap'> 106 <label class="form-text">番地</label> 107 <span class="indispensable">必須</span> 108 </div> 109 <%= f.text_field :addresses, class:"input-default", id:"addresses", placeholder:"例)青山1-1-1"%> 110 </div> 111 <div class="form-group"> 112 <div class='form-text-wrap'> 113 <label class="form-text">建物名</label> 114 <span class="form-any">任意</span> 115 </div> 116 <%= f.text_field :building, class:"input-default", id:"building", placeholder:"例)柳ビル103"%> 117 </div> 118 <div class="form-group"> 119 <div class='form-text-wrap'> 120 <label class="form-text">電話番号</label> 121 <span class="indispensable">必須</span> 122 </div> 123 <%= f.text_field :phone_number, class:"input-default", id:"phone-number", placeholder:"例)09012345678",maxlength:"11"%> 124 </div> 125 </div> 126 <%# /配送先の入力 %> 127 <div class='buy-btn'> 128 <%= f.submit "購入" ,class:"buy-red-btn", id:"button" %> 129 </div> 130 <% end %> 131 </div> 132</div> 133<%= render "shared/second-footer"%>
controllers/orders_controller.rb
ruby
1class OrdersController < ApplicationController 2 before_action :authenticate_user! 3 4 def index 5 @item = Item.find(params[:item_id]) 6 end 7 8 def new 9 @item = Item.find(params[:item_id]) 10 @cart_address = CartAddress.new 11 end 12 13 def create 14 @cart_address = CartAddress.new(cart_params) 15 if @cart_address.valid? 16 @cart_address.save 17 redirect_to root_path 18 else 19 render template: "order/index" 20 end 21 end 22 23 private 24 25 def cart_params 26 params.require(:cart_address).permit(:postal_code, :prefecture_id, :city, :addresses, :building, :phone_number).merge( 27 user_id: current_user.id, item_id: params[:item_id] 28 ) 29 end 30end
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2021/11/18 02:06 編集