ストロングパラメータでhashを許可したい

前提

初心者です。
フォームオブジェクトで生成した複数のチェックボックスのチェック状況をハッシュとして受け取るようにしました。複数のチェックボックスのチェック状況をフォームオブジェクトで扱うため、ストロングパラメータを定義したいのですが、permitメソッド実行時に弾かれてしまいます。

実現したいこと

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

pry-railsを使用し、コンソール上で単にpermitしようとすると、エラーメッセージは出ないものの、flag(複数のチェックボックスのチェック状況をハッシュとして格納したもの)が弾かれてしまう。

[1] pry(#<HimasController>)> params.require(:hima_form)[:flag] => <ActionController::Parameters {"1"=>"0", "2"=>"0", "3"=>"0", "4"=>"1", "5"=>"0", "6"=>"0", "99"=>"1"} permitted: false> [2] pry(#<HimasController>)> params.require(:hima_form).permit(:flag) Unpermitted parameters: :title, :location, :text, :flag, :open_range_id => <ActionController::Parameters {} permitted: true>

該当のソースコード

フォーム部分(フォームオブジェクトを使用しています)

html.erb

1<%= form_with model: @hima_form, url: himas_path, local: true do |f| %> 2 <% @purposes.each_with_index do |purpose, i| %> 3 <div class="field">4 <%= f.check_box :"#{i}", name: "hima_form[flag][#{purpose.id}]" %> 5 <%= f.label :"#{i}", "#{purpose.name}" %> 6 <br>7 </div>8 <% end %> 9 <div class="actions">10 <%= f.submit "投稿する" %> 11 </div>12<% end %>

試したこと

こちらを参照し、コンソール上で下記のコードを実行したが、やはり弾かれてしまう。そもそもparams.require(:hima_form)[:flag]がハッシュとして認識されていない様子。また、4行目の条件式がtrueになるように条件を組んでも弾かれてしまう。

[1] pry(#<HimasController>)> params.require(:hima_form).permit( [1] pry(#<HimasController>)* :title, :location, :text, :open_range_id [1] pry(#<HimasController>)* ).tap do |whitelisted| [1] pry(#<HimasController>)* whitelisted[:flag] = params.require(:hima_form)[:flag] if params.require(:hima_form)[:flag].is_a?(Hash) [1] pry(#<HimasController>)* end Unpermitted parameter: :flag => <ActionController::Parameters {"title"=>"", "location"=>"", "text"=>"", "open_range_id"=>"10"} permitted: true> [2] pry(#<HimasController>)> params.require(:hima_form)[:flag].is_a?(Hash) => false

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

Rails6.0.0, Ruby2.6.5

コメントを投稿

0 コメント