質問するログイン新規登録

Q&A

解決済

1回答

1105閲覧

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

taroyama_taro

総合スコア7

Ruby

Rubyはプログラミング言語のひとつで、オープンソース、オブジェクト指向のプログラミング開発に対応しています。

Ruby on Rails 6

Ruby on Rails 6は、オープンソースのWebアプリケーションフレームワークです。「同じことを繰り返さない」というRailsの基本理念のもと、他のフレームワークより少ないコードで簡単に開発できるよう設計されています。

0グッド

0クリップ

投稿2023/01/05 07:52

0

0

前提

初心者です。
フォームオブジェクトで生成した複数のチェックボックスのチェック状況をハッシュとして受け取るようにしました。複数のチェックボックスのチェック状況をフォームオブジェクトで扱うため、ストロングパラメータを定義したいのですが、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

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

yuma.inaura

2023/01/05 07:54

paramsはどんな値なんでしょう?
taroyama_taro

2023/01/05 08:54

コメントありがとうございます! 不勉強ですみません。どんな値とはどういうことでしょうか? いったん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> ```
guest

回答1

0

ベストアンサー

rb

1params.require(:hima_form).permit(flag: {})

ではいかがでしょう

投稿2023/01/05 09:24

yuma.inaura

総合スコア1453

taroyama_taro

2023/01/05 09:32

できました!ありがとうございます!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.25%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問