環境
- ruby: 2.7.6
- rails: 5.2.8.1
前提
rails で has_many の ids を使用して中間テーブルの関連付けを行う方法 の構成を参照
実際のコード
erb で行うパターンと javascript で行うパターンはそれぞれ以下
※基本的には erb で行うと思うが、 erb の構成に対して値を受け渡す場合にjavascript のパターンを使用する
-
erbのパターンassociation を使用して as: :check_boxes オプションを指定する
<%= simple_form_for @book do |f| %> <%= f.association :categories, as: :check_boxes %> <%= f.button :submit %> <% end %> -
javascriptのパターン最終的に生成される params が以下のようになるように組み立てる
["", 1, 3]
$('form').append( `<input type="hidden" value="" name="book[category_ids][]" />`, ); book.category_ids.forEach((category_id) => { $('form').append( `<input type="hidden" value="${category_id}" name="book[category_ids][]" id="book_category_ids_${category_id}" />`, ); }); -
erb+javascriptjavascriptのパターンの<input type="hidden" value="" name="book[category_ids][]" />部分をerbで行うパターン[erb]
<%= simple_form_for @book do |f| %> <%= f.hidden_field :category_ids, multiple: true, value: nil %> <%= f.button :submit %> <% end %>[javascript]
$('form').append( `<input type="hidden" value="" name="book[category_ids][]" />`, ); book.category_ids.forEach((category_id) => { $('form').append( `<input type="hidden" value="${category_id}" name="book[category_ids][]" id="book_category_ids_${category_id}" />`, ); });