0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

railsで複数の項目から絞り込み検索を実装する際に、collection_check_boxesの引数の書き方で困ったこと

Last updated at Posted at 2020-06-15

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 %>

変更の結果、意図した通りチェックボックスが任意の数表示さすことができた!

0
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?