Rails 5 Checkbox filter

问题描述 投票:3回答:1

我似乎在任何地方都找不到简单的解决方案。简而言之,我只希望能够使用复选框过滤项目,并可以选择多个框并进行过滤。输入参数,但结果不出现(见下文)。

如果从视图中删除[],则可以搜索单个项目,但不能搜索多个项目。 []将%5B%5D编码到URL中,我认为这是搜索无效的一部分。请任何可以帮助的人。

控制器:

@cars = if params[:colour_category]
          Car.where('colour_category LIKE ? OR design LIKE ?', "%#{params[:colour_category]}%", "%#{params[:design_category]}%")
        else
          Car.all
        end

查看:

 <%= form_tag cars_path, method: :get do %>
   <%= check_box_tag('colour_category[]', "Yellow") %>
   <%= check_box_tag('colour_category[]', "Blue") %>
   <%= check_box_tag('design_category[]', "Luxury") %>
   <%= submit_tag "Submit" %>
 <% end %> 

[提交后服务器中的参数示例:Parameters: {"utf8"=>"✓", "colour_category"=>["Yellow", "Blue"], "commit"=>"Submit"}

ruby-on-rails
1个回答
0
投票
module Client::Filterable extend ActiveSupport::Concern include PgSearch::Model included do scope :find_by_company, -> (company_id) { where(company_id: company_id) } pg_search_scope :search, against: %w( name ), using: { tsearch: { prefix: true } } end class_methods do def filter(params = {}) relation = self relation = relation.search(params[:query]) if params.fetch(:query, false).present? relation = relation.find_by_company(params[:company_id]) if params.fetch(:company_id, false).present? relation.all end end end

然后在您的控制器中:

@clients = Client.all.filter(query: 'John Smith', company_id: 4356)

您可以在#filter方法中添加尽可能多的过滤器选项,仅当存在相关的参数键时才应用它们。

def filter(params = {})
  relation = self
  relation = relation.by_color_category(params[:color_category]) if param.fetch(:color_category, false).present?
  relation = relation.by_design_category(params[:design_category]) if param.fetch(:design_category, false).present?
  relation.all
end
© www.soinside.com 2019 - 2024. All rights reserved.