KazumaLab.

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

collection_check_boxesを使ったときにconfirmationのページをどう実装するか

かずまです。

今回collection_check_boxesを使って、formを作っていたときにハマったのでメモします。 ただ、この実装は本当に正しいかは微妙です。参考までにです。

ページの流れ

new -> confirmation -> complete

となっていて、ModelController内にそれぞれのメソッドを生やしています。

blog.kazumalab.com 前回の続きで、has_manyの関係のチェックボックスは簡単に扱えるというメモをのこしました。

collection_check_boxes

複数のチェックボックスを簡単に実装してくれるHelperです。

= f.collection_check_boxes :child_model_ids, ChildModel.all, :id, :name

こんな感じで実装したとします。 もちろん確認ページではチェックボックスは出さないのでhiddenにするのですが、 ただhiddenにするだけはダメでした。

フォームのパラメータとしては

child_model_ids["", "1", "2"]

この形で欲しいわけです。 それに合わせて、

= f.hidden_field :child_model_ids, multiple: true, value: nil
- @model.child_models.each do |child_model|
  = f.hidden_field :child_model_ids, multiple: true, value: child_model.id

こう書いてあげればできました。 multiple: trueを書かないと配列にしてくれないのでつけます。 これでcollection_check_boxesのhiddenを実装ができたと思います。

追記

value: nilを追加する必要がありました。

こんな感じ! なにか間違いがあればご指摘ください!