環境

  • 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  %>
    
  2. 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}" />`,
      );
    });
    
  3. 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}" />`,
      );
    });