質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.46%
Ruby on Rails

Ruby on Railsは、オープンソースのWebアプリケーションフレームワークです。「同じことを繰り返さない」というRailsの基本理念のもと、他のフレームワークより少ないコードで簡単に開発できるよう設計されています。

Q&A

2回答

656閲覧

Ruby on Railsでundefined method `errors' for nil:NilClassを解決したい。

yukitaka

総合スコア0

Ruby on Rails

Ruby on Railsは、オープンソースのWebアプリケーションフレームワークです。「同じことを繰り返さない」というRailsの基本理念のもと、他のフレームワークより少ないコードで簡単に開発できるよう設計されています。

0グッド

0クリップ

投稿2021/03/27 09:07

前提・実現したいこと

Ruby on Railsで釣った魚を投稿するアプリを作成しています。
しかし、投稿ページで必須の入力ができていない場合はエラーを表示させようとコードを記述しましたが、下記のエラーが発生してしまい解決できません。
回答お願いします。

発生している問題・エラーメッセージ

NoMethodError in Informations#new Showing /Users/harayukitaka/projects/fishing/app/views/shared/_error_messages.html.erb where line #1 raised: undefined method `errors' for nil:NilClass <% if model.errors.any? %> <div class="error-alert"> <ul> <% model.errors.full_messages.each do |message| %> <li class='error-message'><%= message %></li> <% end %>

該当のソースコード

routes.rb

1Rails.application.routes.draw do 2 devise_for :users 3 root to: 'informations#index' 4 resources :informations, only: [:index, :new, :create] 5end

information_controller.rb

1class InformationsController < ApplicationController 2 before_action :authenticate_user!, except: [:index] 3 4 def index 5 @informations = Information.all.order("created_at DESC") 6 end 7 8 def new 9 @information = Information.new 10 end 11 12 def create 13 @information = Information.new(information_params) 14 if @information.save 15 redirect_to root_path 16 else 17 render :new 18 end 19 end 20 21 private 22 23 def information_params 24 params.require(:information).permit(:image, :title, :text, :date_id, :fish, :size, :weight, :number, :prefecture_id, :area).merge(user_id: current_user.id) 25 end 26end 27

models

1class Information < ApplicationRecord 2 belongs_to :user 3 has_one_attached :image 4 5 with_options presence: true do 6 validates :image 7 validates :title 8 validates :fish 9 end 10 11 with_options numericality: { other_than: 1 } do 12 validates :prefecture_id 13 validates :date_id 14 end 15 16 extend ActiveHash::Associations::ActiveRecordExtensions 17 belongs_to :prefecture 18 19end

new.html.erb

1<div class="items-sell-contents"> 2 <div class="items-sell-main"> 3 <h2 class="items-sell-title">釣果を入力</h2> 4 <%= form_with midel: @information, local: true do |f| %> 5 6 <%= render 'shared/error_messages', model: f.object %> 7 8 <div class="img-upload"> 9 <div class="weight-bold-text"> 10 画像 11 <span class="indispensable">必須</span> 12 </div> 13 <div class="click-upload"> 14 <p> 15 クリックしてファイルをアップロード 16 </p> 17 <%= f.file_field :image, id:"item-image" %> 18 </div> 19 </div> 20 21 <div class="new-items"> 22 <div class="weight-bold-text"> 23 釣果情報 24 <span class="indispensable">必須</span> 25 </div> 26 <%= f.text_area :title, class:"items-text", id:"item-name", placeholder:"釣果情報(必須 40文字まで) 例(タイが釣れました。)", maxlength:"40" %> 27 <div class="items-explain"> 28 <div class="weight-bold-text"> 29 釣果情報の説明 30 <span class="any-add">任意</span> 31 </div> 32 <%= f.text_area :text, class:"items-text", id:"item-info", placeholder:"釣果情報の説明(任意 1,000文字まで) 例(休日に堤防で釣りをしていたところタイが釣れました。)" ,rows:"7" ,maxlength:"1000" %> 33 </div> 34 </div> 35 36 <div class="items-detail"> 37 <div class="fish-information">釣果データ</div> 38 <div class="form"> 39 <div class="weight-bold-text"> 40 釣れた日 41 <span class="indispensable">必須</span> 42 </div> 43 <div class='input-date_id'> 44 <%= f.datetime_field :date_id, class:"items-data_id", id:"item-name" %> 45 </div> 46 <div class="weight-bold-text"> 47 魚種 48 <span class="indispensable">必須</span> 49 </div> 50 <%= f.text_field :fish, class:"items-fish", id:"item-name", placeholder:"(必須 20文字まで)", maxlength:"20" %> 51 <div class="weight-bold-text"> 52 サイズ 53 <span class="any-add">任意</span> 54 </div> 55 <%= f.number_field :size, class:"items-size", id:"item-name" %><span class="size-cm"> cm</span> 56 <div class="weight-bold-text"> 57 重さ 58 <span class="any-add">任意</span> 59 </div> 60 <%= f.number_field :weight, class:"items-weight", id:"item-name" %><span class="weight-Kg"> Kg</span> 61 <div class="weight-bold-text"> 62 匹数 63 <span class="any-add">任意</span> 64 </div> 65 <%= f.number_field :number, class:"items-number", id:"item-name", maxlength:"3" %><span class="number-fish"> 匹</span> 66 <div class="weight-bold-text"> 67 都道府県 68 <span class="indispensable">必須</span> 69 </div> 70 <%= f.collection_select(:prefecture_id, Prefecture.all, :id, :name, {}, {class:"select-box", id:"item-prefecture"}) %> 71 <div class="weight-bold-text"> 72 エリア 73 <span class="any-add">任意</span> 74 </div> 75 <%= f.text_field :area, class:"items-area", id:"item-name", placeholder:"(必須 20文字まで)", maxlength:"20" %> 76 </div> 77 </div> 78 79 <div class="sell-btn-contents"> 80 <%= f.submit "投稿する" ,class:"sell-btn" %> 81 <%=link_to 'もどる', root_path, class:"back-btn" %> 82 </div> 83 </div> 84 <% end %> 85</div>

shared

1<% if model.errors.any? %> 2<div class="error-alert"> 3 <ul> 4 <% model.errors.full_messages.each do |message| %> 5 <li class='error-message'><%= message %></li> 6 <% end %> 7 </ul> 8</div> 9<% end %>

試したこと

メソッドがないとのことなのでコントローラーのnewアクションの定義に誤字があるのかと思って確認したが問題なさそうでした。
また、モデルかビューの記述にミスがあると思い現在調べているのですが、記述の方法がいまいち分かっていないので、教えて頂けたらありがたいです。
回答よろしくお願いします。

補足情報(FW/ツールのバージョンなど)

ここにより詳細な情報を記載してください。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答2

0

<%= render 'shared/error_messages', model: f.object %>

<%= render 'shared/error_messages', model: @information %>
にするとどうなります?

投稿2021/03/29 14:58

winterboum

総合スコア23401

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

yukitaka

2021/03/29 15:28

すみません。 問題解決できていたのですがコメント打つのを忘れていました。 結果としては、<%= form_with midel: @information, local: true do |f| %>が「model」ではなく「midel」となってミスしていました。 また、form_withを下記のように記述すると解決しました。 <%= form_with model: @information, url: informations_path, method: :post, local: true do |f| %>
guest

0

undefined method `errors' for nil:NilClass

nilにはerrorsというメソッドは存在しない、といってます。

errorsってのがくっついている変数のナカミがnilになってます

投稿2021/03/27 09:27

y_waiwai

総合スコア87793

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

yukitaka

2021/03/27 12:27

回答ありがとうございます。 errorsにくっついてる変数のナカミはどうすればnilではないようにできるのでしょうか?
y_waiwai

2021/03/27 12:31

その変数になにか代入しましょう。 って、まずはなんでそれがnilになってしまっているかの原因をはっきりさせることでしょう。 あなたのコードなんですから、あなたがやらないと
yukitaka

2021/03/28 02:54

回答ありがとうございます。 調べて解決していきます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.46%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問