環境

  • ruby: 2.7.6
  • rails: 5.2.8.1

前提

rails で has_many の ids を使用して中間テーブルの関連付けを行う方法 の構成を参照

実際のコード

erb で行うパターンと javascript で行うパターンはそれぞれ以下
※基本的には erb で行うと思うが、 erb の構成に対して値を受け渡す場合にjavascript のパターンを使用する

  1. erb のパターン

association を使用して as: :check_boxes オプションを指定する

<%= simple_form_for @book do |f| %>
  <%= f.association :categories, as: :check_boxes %>
  <%= f.button :submit %>
<% end  %>
  1. 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}" />`,
  );
});
  1. 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}" />`,
  );
});