KazumaLab.

流行りとリラックマと嵐が大好きです。

has_manyの関係でCheckboxを扱うのが超便利だった。(知らなかった)

かずまです。

今日色々1対多な関係で、Checkboxで複数選択させたい場合、 結構面倒だと思ってたのですが、意外となにもしなくてRailsすごい!ってなったのでメモしておきます。

使うのはcollection_check_boxesを使います。

なお、今回は

  • メインのモデルをModelとする
  • ModelはAssociationModelを複数持つ

を前提とします。

Viewでゴニョゴニョ定義します。(引数2つ目のインスタンスは適宜Controllerで作るなりしてください。) すると、checkboxが現れます。

# model/new.html.haml
= f.collection_check_boxes :association_models_ids, AssociationModel.all, :id, :name

あとはControllerのStrong Parameterで

params.require(:model).permit(
    ....
    association_model_ids: []
)

このようなにidの配列をとればOK! あとはいつも通りインスタンスを生成するときにparamsを渡すと中間テーブルを発行してくれる。 便利!

無駄なコードを書かなくても済むのはいい!

結構やりそうなこと

  • 複数のIDをeachなどでぶん回してbuildするとか?(まず今回これやってました)
  • accepts_nested_attributes_forを使う?

参考サイト

ちょっと使い方までは…というところ。 railsguides.jp

とりあえずドキュメントを見ればよかったと…。 だけど公式ではUpdateの例が上がってて、ほんとにこれでいいの?ってなったので実際にやってみました。 ActionView::Helpers::FormOptionsHelper