環境
- 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
+javascript
javascript
のパターンの <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}" />`,
);
});