繁体   English   中英

Ruby on Rails 4使用filterrific基于复选框进行过滤

[英]Ruby on rails 4 using filterrific to filter based on checkbox

我在rails应用程序中使用filterrific gem过滤结果,我根据代码的选项过滤事件,如下所示

event.rb

filterrific :default_filter_params => { :sorted_by => 'created_at_desc' },
              :available_filters => %w[
                sorted_by
                search_query
                with_category_id
                with_area
              ]

 # default for will_paginate
   self.per_page = 9

scope :with_category_id, lambda { |category_ids|
                          where(category_id: [*category_ids])
                        }

events_controller.rb

def index
  @filterrific = initialize_filterrific(
        Event,
        params[:filterrific],
        :select_options => {
             sorted_by: Event.options_for_sorted_by,
             with_category_id: Category.options_for_select

        }
    ) or return
    @events = @filterrific.find.paginate(page: params[:page], per_page: 6).where(is_job: false)


  respond_to do |format|
      format.html
      format.js
    end
end

index.html.erb

<%= form_for_filterrific @filterrific, :class => 'col s12' do |f| %>

          <%= render_filterrific_spinner %>
          <%= f.hidden_field :source , :value => 'event' %>
          <div class="col s12 m3 ">
            <div class="filter-container">
             <li>
                  <%= f.select(
                                  :with_category_id,
                                  @filterrific.select_options[:with_category_id],
                                  { include_blank: ' Any ' },
                                  class: 'select-filter'
                          ) %>

                      <label>select category</label>

                </li>
             </div>
            <%= link_to(
                        'Reset filters',
                        reset_filterrific_url,
                ) %>
          </div>
      <% end %>

<%= render(
                                                 partial: 'events/list',

                                         ) %>

index.js.erb

<% js = escape_javascript(
  render(partial: 'events/list')
) %>
$("#filterrific_results").html("<%= js %>");
$('#filterrific_results').load(document.URL +  ' #filterrific_results');

_list.html.erb

<div id="filterrific_results">
<% @events.each do |event| %>
<%= link_to event.name, company_event_path(event.company.id, event.id) %>
 <% end %>

</div>

因此,我在这里所做的是我使用选择框根据事件的类别过滤了事件,但现在我想在选择框中添加功能,即选择框必须包含复选框元素,以便我可以过滤多个类别的结果,因此当我检查一个类别时,它将按该单个类别过滤结果;当我单击另一个类别时,将对具有该类别和先前检查的类别的结果进行过滤

提前解决此问题将对您大有帮助,谢谢

您可以使用multiple: true ,如下所示:

<%= f.select(
                                  :with_category_id,
                                  @filterrific.select_options[:with_category_id],
                                  { include_blank: ' Any ' },
                                  { multiple: true, class: 'select-filter'}
                          ) %>

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM