前提・実現したいこと
バリテーションを正常に作動させ、エラーメッセージを出したいです。
発生している問題・エラーメッセージ
Ruby(Ruby on Rails)でバリテーションによるエラーメッセージを画面に表示しようとしているのですが、エラー画面が出てしまい先に進みません。 エラー画面には、 undefined method `errors' for nil:NilClass と表示され、エラー該当部分は <% if @snack.errors.any? %> になります。
該当のソースコード
snackscontrollerrb
1class SnacksController < ApplicationController 2 (略) 3 def new 4 @snack = Snack.new 5 end 6 def create 7 @snack = Snack.new(snack_params) 8 if @snack.save 9 flash[:notice] = "Snack was successfully created." 10 redirect_to snack_path(@snack.id) 11 else 12 render :index 13 end 14 end 15 (略) 16 private 17 def snack_params 18 params.require(:snack).permit(:title, :category, :body) 19 end 20end
indexhtmlerb
1 (略) 2<h4>New Snack</h4> 3 4<% if @snack.errors.any? %> 5 <%= @snack.errors.count %>errors prohibited this snack from being save: 6 <% @snack.errors.full_messages.each do |message| %> 7 <%= message %> 8 <% end %> 9<% end %> 10 11<%= form_with model: @snack, local: true do |f| %> 12 <h5>商品名</h5> 13 <%= f.text_field :title %> 14 <h5>カテゴリー</h5> 15 <%= f.text_field :category %> 16 <h5>商品説明</h5> 17 <%= f.text_area :body %> 18 <br><%= f.submit "Create Snack" %></br> 19<% end %>
routesrb
1Rails.application.routes.draw do 2 3 root :to => "homes#top" 4 resources :snacks 5end
試したこと
コントローラーアクションに問題があると思い、変数定義など色々試しましたが、解らず、また、周囲に聞ける人がおらず、質問させていただきました。
補足情報(FW/ツールのバージョンなど)
Rails バージョン5.2.6 ruby 2.6.8
作成したモデルは、Snack テーブル snacks カラムは, title category body になります。
また、新規投稿フォームと投稿一覧画面をindex内に記載しています。
回答1件
あなたの回答
tips
プレビュー