msdyum
@msdyum (msdyum)

Are you sure you want to delete the question?

Leaving a resolved question undeleted may help others!

Railsのnew→createアクションができない

解決したいこと

undefined method `map' for nil:NilClass

    container.map do |element|
             ^^^^

このエラーの解決をしたいです。

現在Rails6.1.3.2を使用し、CRUD機能を使ってお店の口コミ登録のようなWebアプリを作成しております。
お店を新規登録する際に、
・店名
・住所
・国(どこの国の料理が食べられるのか)
・メモ(任意)
・画像(任意)
これらの情報を入力し、登録をする場面でエラーが出ています。
解決方法を教えていただけると助かります。

発生している問題・エラー

undefined method `map' for nil:NilClass

        container.map do |element|
                 ^^^^

スクリーンショット 2024-04-08 11.55.01.png

該当するソースコード

    <div class="listing-form-box">
      <div class="listing-restaurant-detail__country">
        <%= f.label 'カテゴリー', class: 'listing-default__label' %>
        <span class="listing-default--require">必須</span>
        <div class="listing-select-wrapper">
          <div class="listing-select-wrapper__box">
            <%= f.select :country_id, country_parent_array, {}, {class: 'listing-select-wrapper__box--select', id: 'parent_country'} %>
            <i class="fas fa-chevron-down listing-select-wrapper__box--arrow-down"></i>
          </div>
        </div>
      </div>
    </div>  

このコードの書くにあたって参考にしたこと

このコードは、下記の記事を参考にコーディングしました。
https://qiita.com/ATORA1992/items/bd824f5097caeee09678
また、国のカラムはancestryというgemを使用して多階層に分類分けをしています。
スクリーンショット 2024-04-08 12.00.38.png

その他jbuilderのファイルや、.jsのファイルも記事を参考に同様に設定をしています。
スクリーンショット 2024-04-08 12.14.17.png
スクリーンショット 2024-04-08 12.14.33.png
スクリーンショット 2024-04-08 12.14.45.png

スクリーンショット 2024-04-08 12.13.41.png

スクリーンショット 2024-04-08 12.17.24.png

スクリーンショット 2024-04-08 12.18.23.png
スクリーンショット 2024-04-08 12.18.31.png

RestaurantはCountryを1つしか紐付けできないように設定し、1つのCountryはいろんなRestaurantに紐付けることが可能なので、 CountryとRestaurantは多:1 でリレーションを組んでいます。
スクリーンショット 2024-04-08 12.22.21.png

テーブルごとのカラム設定です。
スクリーンショット 2024-04-08 13.03.28.png

自分で試したこと

pryを使って、エラーの原因となっているcountry_parent_arrayの中身を確認しました。
初めにrestaurants/newのページを開くときは、country_parent_arrayに、parentとして設定している["アジア", "ヨーロッパ", "アフリカ", "ロシア・NIS諸国", "オセアニア", "北米", "中南米"]が入っています。
その後、お店の情報を入れて登録ボタンを押し、pryでcountry_parent_arrayを見るとnilになっています。
これがなぜ起きているのかがわかっていません。

パラメータで送る情報の設定などが間違っているのかなと思いましたが、登録するときはcountry_parent_arrayに当たるparent_countryの値("アジア", "ヨーロッパ", "アフリカ", "ロシア・NIS諸国", "オセアニア", "北米", "中南米"のいずれか)は必ず入っているので、どうしてnilになるのかが分かりません。

他に足りない情報などがございましたら教えていただけますと幸いです。
初学者ゆえ大変初歩的な質問で恐れ入りますが、何卒よろしくお願いいたします…

0

1Answer

Your answer might help someone💌