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