railsで検索機能を実装する際に、collection_check_boxesを使用した。
**投稿(post)にcategory(種類:kind,場所:place)**を設け一覧画面から検索できるように実装した。
今回は複数の項目から絞り込み検索機能を実装する。
初めてチェックボックスを使用するのでググりながら実装してみた結果が以下である。
<%= form_for @post do |f| %>
<div class="form-group">
<%= f.collection_check_boxes(:category_ids, category.all, :id, :kind) do |ki| %>
<div class="form-check">
<%= ki.label class: 'form-check-label' do %>
<%= ki.check_box class: 'form-check_input' %>
<%= ki.text %>
<% end %>
</div>
<% end %>
</div>
<div class="form-group">
<%= f.collection_check_boxes(:category_ids, Category.all, :id, :place) do |pl| %>
<div class="form-check">
<%= pl.label class: 'form-check-label' do %>
<%= pl.check_box class: 'form-check_input' %>
<%= pl.text %>
<% end %>
</div>
<% end %>
</div>
<% end %>
チェックボックスの引数にcategory.allとした結果、作成したいチェックボックスがcategory(種類:kind,場所:place)の両方を合わせた数表示された。
コントローラーを修正しインスタンス変数を使用することにした。それが以下である。
posts_controller
def new
@post = Post.new
@kinds = Category.all[0..7]
@placs = Category.all[8..54]
end
private
def post_params
params.require(:post).permit(:image, :name, :content, kind_ids: [], place_ids: [])
end
種類、場所それぞれに配列で欲しい数のチェックボックスが表示されるように範囲を指定した。それに伴いviewファイルも変更した結果が以下である。
<%= form_for @post do |f| %>
<div class="form-group">
<%= f.collection_check_boxes(:category_ids, @kinds, :id, :kind) do |ki| %>
<div class="form-check">
<%= ki.label class: 'form-check-label' do %>
<%= ki.check_box class: 'form-check_input' %>
<%= ki.text %>
<% end %>
</div>
<% end %>
</div>
<div class="form-group">
<%= f.collection_check_boxes(:category_ids, @place, :id, :place) do |pl| %>
<div class="form-check">
<%= pl.label class: 'form-check-label' do %>
<%= pl.check_box class: 'form-check_input' %>
<%= pl.text %>
<% end %>
</div>
<% end %>
</div>
<% end %>
変更の結果、意図した通りチェックボックスが任意の数表示さすことができた!