Rails 多対多で中間テーブルに保存する時にハマったこと

# 開発環境
- Ruby2.3.1
- Ruby on Rails 5.1.3

# やりたいこと
自分の投稿した服のアイテムの中から、秋のコーディネートみたいに名前をつけて、いくつか保存して整理したい。
例（３０個ほど、投稿したアイテムの中からタートルネックだけ３つくらい選択して、保存する）

# ハマった所
チェックボックスで複数のアイテムを選択させようと思った時に
```f.collection_check_boxes```を使ったのですが思うようにいきませんでした。
![スクリーンショット 2017-11-13 22.03.35.png](https://qiita-image-store.s3.amazonaws.com/0/210782/9bf557f7-23f9-9a19-1ee8-f17c88a24a4a.png)
このような感じで、一つのアイテム画像の中に今まで投稿したアイテムの名前が出てしまっています。
やりたいこととしては、アイテム画像の中にチェックボックス一つだけつけるようにしたいので、ここでまず悩みました。
ちなみにコントローラーではこのような形で保存しようと思っています

```controllers/folders_controller.rb
class FoldersController < ApplicationController

  before_action :get_item, only: [:new,:create]

  def new
    @folder = current_user.folders.new
  end

  def create
    @folder = current_user.folders.new(folder_params)
    if @folder.save
      redirect_to root_path
    else
      render :new
    end
  end

  def show
    @folder = Folder.find(params[:id])
  end

  private

  def folder_params
    params.require(:folder).permit(:name, { item_ids: [] })
  end

  def get_item
    @items = current_user.items.includes(:brand)
  end
end

```

中間テーブルにレコードを保存させようと思っているので、配列の形になっています。


```controllers/folders_controller.rb
  def folder_params
    params.require(:folder).permit(:name, { item_ids: [] })
  end
```
ここのやり方はhttps://qiita.com/hamichamp/items/8cf980e6d5ca9fd7e96f
を参考にしました。

``f.collection_check_boxes``では全てのアイテムデータが出てしまったので、``f.check_box``
で保存させようとすると配列では無理なのかと思いましたが、調べたらありました！
実際のviewのコードをのせておきます。

```views/folders/new.html.slim
.container-fluid
  .cbp-l-project-title.height-ajust
    | フォルダを作成しよう!
  = form_for (@folder) do |f|
    .form-group.block-center
      = f.label :name, 'フォルダ名'
      br/
      = f.text_field :name, class: 'form-control folder-title'
    .cbp-l-portfolio.boxes.box-center
      - @items.each do |item|
          .cbp-item-wrap.item-left data-category="#{item.model_name.element}"
            = link_to item_path(item) do
              .cbp-caption-defaultWrap
              ul#select
                li = image_tag item.thumbnails.first.image, class: "target item-thumbnail-capture"
            .text-center.brand_field
              = f.check_box :item_ids, { multiple: true, include_hidden: false, class: "check-box" }, item[:id]
              img.center-block.img-rounded.brand_icon alt=("no icon") src="#{item.brand.icon_url}" width="40"
              .brand_name #{item.brand.name}
            .text-center.item-name #{item.name}
            / = link_to_update_item_status(item)
    .form-group.folder-clearfix
      = f.submit '送信', class: "btn btn-primary folder-btn"

```

``= f.check_box :item_ids, { multiple: true, include_hidden: false, class: "check-box" }, item[:id]``の部分ですが、``multiple: true``オプションをつけると配列の形で取れるようになります。また``include_hidden: false``オプションはチェックしたやつだけを配列の中に入れることができます。これがないとチェックしてないアイテムが0として入ってしまいました。
![スクリーンショット 2017-11-13 22.27.05.png](https://qiita-image-store.s3.amazonaws.com/0/210782/04a7439e-0a7e-2d35-03e2-344f65205a04.png)

完成形はこんな感じです。
![スクリーンショット 2017-11-13 22.51.13.png](https://qiita-image-store.s3.amazonaws.com/0/210782/f777a8fd-b07c-45f9-edc1-830dce8b07b4.png)

# 参考サイト
[Rails4でcollection_check_boxesを使って、多対多の関連をチェックボックスで設定する - Qiita](https://qiita.com/hamichamp/items/8cf980e6d5ca9fd7e96f)
[form_forで複数のcheck_boxを表示して配列で取得する方法 - Qiita](https://qiita.com/chocoken517/items/6efb9c5a1b035f9a50fa)