20
29

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

collection_selectにインスタンス変数を渡すと、undefined method `map' for nil:NilClass が発生するエラー

Last updated at Posted at 2017-10-29

# 実装内容
登録機能、編集機能などを実装中、名前などを空にして、validationでエラーメッセージを表示させようとしたときに発生しました。

viewではRailsのcollection_selectを使って、セレクトボックスを実装しています。
下記のコードを edit にも書いております。

controller#new

def new
  @takumis = Takumi.all
end 

view
.ui.grid
 .wide.column
   = c.label :name
   = c.collection_select :name, @takumis, :id, :name, include_blank: '選択してください'
 

発生したエラー

undefined method map' for nil:NilClass`

インスタンス変数で渡している場所を、@takumis => Takumi.allと書き直せばエラーは解消されます。
しかし、controllerとviewの責務にそって表示させたい時などは インスタンスで定義したいと思うこともあるでしょう。

変更後のview
.ui.grid
 .wide.column
   = c.label :name
   = c.collection_select :name, Takumi.all, :id, :name, include_blank: '選択してください'

解決方法

@takumisを create updateなどにも持たせる必要がある。
同じコントローラーに下記の様な形で追加しました。
before_actionなどを使えば DRYになるかと....

理由は現在も調査中でございます!すいません😱

controller
before_action :set_takumis, only: [:new, :create, :edit, :update]

private

def set_takumis
  @takumis = Takumi.all
end

参考

https://qiita.com/shyamahira/items/30e56d8057edcd85ca2d
https://stackoverflow.com/questions/31734189/rails-undefined-method-map-for-nilnilclass-form-collection-select

20
29
1

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
20
29

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?