# 実装内容
登録機能、編集機能などを実装中、名前などを空にして、validationでエラーメッセージを表示させようとしたときに発生しました。
viewではRailsのcollection_selectを使って、セレクトボックスを実装しています。
下記のコードを edit にも書いております。
def new
@takumis = Takumi.all
end
.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の責務にそって表示させたい時などは インスタンスで定義したいと思うこともあるでしょう。
.ui.grid
.wide.column
= c.label :name
= c.collection_select :name, Takumi.all, :id, :name, include_blank: '選択してください'
解決方法
@takumisを create updateなどにも持たせる必要がある。
同じコントローラーに下記の様な形で追加しました。
before_actionなどを使えば DRYになるかと....
理由は現在も調査中でございます!すいません😱
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