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

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

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

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

Ruby

Rubyはプログラミング言語のひとつで、オープンソース、オブジェクト指向のプログラミング開発に対応しています。

Ruby on Rails

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

Q&A

解決済

3回答

254閲覧

undefined method `[]' for nil:NilClass を解決したい

KokiOya

総合スコア27

Ruby on Rails 5

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

Ruby

Rubyはプログラミング言語のひとつで、オープンソース、オブジェクト指向のプログラミング開発に対応しています。

Ruby on Rails

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

0グッド

2クリップ

投稿2019/07/06 14:55

rails初心者です。TeacherとPrefectureを多対多の関係にしたかったので、中間テーブルを使ったのですが、Teacher.prefecture.idsに値を入れようとするとundefined method `[]' for nil:NilClassというエラーが出てしまいます。

@teacher.prefecture_ids = params[:prefecture][:area]

このコードにエラーが出ます。全体的にはこのようにしております

<%= form_for(@teacher) do |f| %> <div class = "field"> <%= f.label :"指導可能都道府県1" %> <%= collection_select(:prefecture, :area, Prefecture.all, :id, :name, {include_hidden: false}, {multiple: true}) %> </div> <div class = "field"> <%= f.label :"指導可能都道府県2" %> <%= collection_select(:prefecture, :area, Prefecture.all, :id, :name, {include_hidden: false} ,{multiple: true}) %> </div> <div class= "field"> <%= f.label :"指導可能都道府県3" %> <%= collection_select(:prefecture, :area, Prefecture.all, :id, :name, {include_hidden: false}, {multiple: true}) %> </div> <%= f.submit "登録" %> <% end %>
def create @teacher = Teacher.new(teacher_params) @teacher.prefecture_ids = params[:prefecture][:area] ←このコードにエラーが出る if @teacher.save! redirect_to teachers_url else render 'new' end end

ご回答のほどよろしくお願いします。

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

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

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

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

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

guest

回答3

0

ベストアンサー

> 全てにチェックしていない状態でエラーを出さないため
@teacher.prefecture_ids = params[:prefecture][:area]

にて、params[:prefecture]の存在を確認してから進めます

# 例 @teacher.prefecture_ids = params[:prefecture] ? params[:prefecture][:area] : []

間違い。[]でなく{}です

投稿2019/07/07 07:37

編集2019/07/07 07:53
winterboum

総合スコア23347

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

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

KokiOya

2019/07/07 13:14

そちらの方法で解決しました!ありがとうございました。
guest

0

もしかして、テストしたときに3つのcollection_select 全てに checkせず、少なくとも一番下は未選択の状態ではなかったですか?
3つのselectが何れも collection_select(:prefecture, :area になっているため、一番下の選択状態が返されたのではないか、と思います。
指導可能都道府県1、2,3 とするなら、それに対応して areaも複数別の物を用意する必要があります。
{multiple: true} しているのですから、指導可能都道府県(1,2,3なし)一つで複数都道府県を選ばせれば良いようにも思えます。

投稿2019/07/06 19:56

winterboum

総合スコア23347

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

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

KokiOya

2019/07/07 02:28

ご回答ありがとうございます。全てにcheckしていない状態でテストしてしまっていました。しかし、全てにチェックしていない状態でエラーを出さないためにはどうすればよろしいでしょうか?
guest

0

こんばんは。

画面のフォームから送信してデータ作成の処理をする際、ログにリクエストパラメータが表示されるかと思います。その値は正しくparamsもしくはparams[:prefecture]に渡っているでしょうか。

  • paramsもしくはparams[:prefecture]がnilになっている
  • @teacher がnilになっている

上でのエラーだと思いますので、デバッグかプリントして確認してみてはいかがでしょう。

投稿2019/07/06 16:00

suama

総合スコア1997

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問