前提
初心者です。
フォームオブジェクトで生成した複数のチェックボックスのチェック状況をハッシュとして受け取るようにしました。複数のチェックボックスのチェック状況をフォームオブジェクトで扱うため、ストロングパラメータを定義したいのですが、permitメソッド実行時に弾かれてしまいます。
実現したいこと
- params内の"flag"というキーで受け取ったハッシュをストロングパラメータに定義したい
発生している問題・エラーメッセージ
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
paramsはどんな値なんでしょう?
コメントありがとうございます!
不勉強ですみません。どんな値とはどういうことでしょうか?
いったんparamsの中身を置いておきます。
```
[1] pry(#<HimasController>)> params
=> <ActionController::Parameters {"authenticity_token"=>"AL3Gmk+dlYLr==", "hima_form"=>{"title"=>"タイトル", "location"=>"場所", "text"=>"こんにちは", "flag"=>{"1"=>"1", "2"=>"0", "3"=>"0", "4"=>"1", "5"=>"0", "6"=>"0", "99"=>"1"}, "open_range_id"=>"10"}, "commit"=>"投稿する", "controller"=>"himas", "action"=>"create"} permitted: false>
```
回答1件
あなたの回答
tips
プレビュー