我正在尝试将搜索过滤器合并到我的搜索结果页面中。在用户搜索并在search.html.erb上显示结果之后,我希望他们使用过滤器。过滤器将从搜索结果本身派生出来。
换句话说,我想复制汽车大师的做法。你搜索使用制造,模型,价格,然后过滤器会给你的选择面搜索取决于搜索车辆修剪,变速器等。
我尝试了一个过滤器链接,比如:
<%= addfilters "transmission", "Automatic" %>和定义助手方法,如
def addfilters(column, title)
link_to title, params.permit(:NewUsed, :category, :subcategory, :minprice, :maxprice, :location, :radius).merge({:"#{column}" => "Automatic"})
end但我怎么能:

我不想使用外部依赖关系或宝石,比如ransack或filterrific,我想从零开始学习分面搜索。
如果需要,我的搜索表单代码是:
<div id="Make" class="tabcontent1">
<section class="formclass">
<!-- f.select :transmission, ['Automanual','Automatic','Automatic 4 Speed','Automatic 5 Speed','Automatic 6 Speed','CVT','Manual'] -->
<h3 style = "color:#F00000; text-align: center;"><strong><%= @carcount %> CARS LISTED!</strong></h3>
<hr>
<h3 style = "color:#7C064D;"><span class="glyphicon glyphicon-search"></span> <strong>SEARCH CARS FOR SALE BY MAKE</strong></h3>
<%= form_tag search_listings_path, method: :get, class: 'navbar-form navbar-center' do |f| %>
<div class= "col-xs-12 col-sm-12 col-lg-12 col-md-12">
<%= select_tag :NewUsed, "<option>New</option><option>Used</option>".html_safe, style: "width: 100%; margin: 1% 0;" %>
</div>
<div class= "col-xs-6 col-sm-6 col-lg-6 col-md-6">
<%= select_tag :category, include_blank: true, style: "width: 100%; margin: 1% 0;" %>
</div>
<div class= "col-xs-6 col-sm-6 col-lg-6 col-md-6">
<%= select_tag :subcategory, include_blank: true, style: "width: 100%; margin: 1% 0;" %>
</div>
<!-- <div class= "col-xs-12 col-sm-12 col-lg-12 col-md-12"> -->
<div class= "col-xs-6 col-sm-6 col-lg-6 col-md-6">
<%= text_field_tag :minprice, nil, placeholder: 'Min Price', style: "width: 100%; margin: 1% 0;" %>
</div>
<div class= "col-xs-6 col-sm-6 col-lg-6 col-md-6">
<%= text_field_tag :maxprice, nil, placeholder: 'Max Price', style: "width: 100%; margin: 1% 0;" %>
</div>
<!-- </div> -->
<div class= "col-xs-6 col-sm-6 col-lg-6 col-md-6">
<%= text_field_tag :location, nil, placeholder: 'Near', style: "width: 100%; margin: 1% 0;" %>
</div>
<div class= "col-xs-6 col-sm-6 col-lg-6 col-md-6">
<%= text_field_tag :radius, nil, placeholder: 'Radius', style: "width: 100%; margin: 1% 0;" %>
</div>
<div class= "col-xs-12 col-sm-12 col-lg-12 col-md-12">
<%= submit_tag 'Search', class: 'btn btn-danger', style: "width: 100%;" %>
</div>
<% end %>
</section>
</div>发布于 2017-10-27 03:35:35
像这样的模块可以工作。
module Filterable
extend ActiveSupport::Concern
module ClassMethods
def filter(filtering_params)
results = self.where(nil)
filtering_params.each do |key, value|
results = results.public_send(key, value) if value.present?
end
results
end
end
end
#Controller
def index
@products = Product.filter(params.slice(:status, :location, :over_price, :under_price))
end
#class Car < ApplicationRecord
class Product < ApplicationRecord
include Filterable
scope :status, -> (status) { where status: status }
scope :location, -> (location_id) { where location_id: location_id }
scope :over_price, -> (price) { where "price > ?", price) }
scope :under_price, -> (price) { where "price < ?", price) }
#continue adding more scopes here
endhttps://stackoverflow.com/questions/46965333
复制相似问题