正解というより、皆さんでしたら、どのようにコーディングするかご意見頂きたいです。
現状のHTMLを変更して、現状の送信されているデータの構造を変更したいです。
言語:Ruby
現状のHTML(erb)
Ruby(HTML)
1 <% @articles.each do |article| %> 2 <div data-article_id="<%= article[:article_id] %>"> 3 <%= select_tag 'types[]', options_for_select({選択してください: "not_selected", タイプA: "type_a", タイプB: "type_b", タイプC: "type_c", タイプD: "type_d"}) %> 4 <p><%= check_box_tag "ids[]", article[:id], false, id: "article_id_#{page[:article_id]}", class: "form-checkbox rounded text-blue-500 mr-1" %> 5 <label for="article_id_<%= article[:article_id] %>" class="align-middle">送信対象として選択する</label></p> 6 </div> 7 <% end %>
上記をsubmitした際の、現状のparamsの中身
{"types"=>["type_c", "type_b"], "article_ids"=>["676", "677"], "commit"=>"確認する", "controller"=>"article/register", "action"=>"select", "id"=>"370"
修正したい形
{"article_ids"=>[["676","type_c"], ["677","type_b"]], "commit"=>"確認する", "controller"=>"article/register", "action"=>"select", "id"=>"370"
つまり
現状
@articlesをループで回す中で、articleのidはチェックボックスなので選択した値だけが送信されますが、typeはセレクトボックスなので、全て送信されます。
修正後
チェックボックスで選択していないarticleのidに紐づくセレクトボックスのtypeは送信させたくないのです。
チェックされている場合は、idとtypeを1つの配列として、以下の形のようにパラメータに加えたいです。
"article_ids"=>[["676","type_c"], ["677","type_b"]],
typesというkeyは廃止の方向です。
何卒よろしくお願いいたします。
回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2021/06/30 06:14