【发布时间】:2020-12-01 16:23:15
【问题描述】:
我正在开展一个项目,我们必须根据地点、日期、运动和技能水平过滤事件。目前每个过滤器都单独工作,但我无法将它们链接起来以获得更具体的结果。
这就是我的模型中的内容。
include PgSearch::Model
pg_search_scope :global_search,
against: [:location, :sport, :level, :date]
pg_search_scope :date_search,
against: [:date]
pg_search_scope :sport_search,
against: [:sport],
using: {
tsearch: { prefix: true }
}
pg_search_scope :location_search,
against: [:location],
using: {
tsearch: { prefix: true }
}
pg_search_scope :level_search,
against: [:level]
enum level: { Beginner: 1, Intermediate: 2, Advanced: 3, Pro: 4 }
这是在我的控制器中。
def index
if params[:search][:location].present?
@events = policy_scope(Event).location_search(params[:search][:location])
elsif params[:search][:sport].present?
@events = policy_scope(Event).sport_search(params[:search][:sport])
elsif params[:search][:date].present?
@events = policy_scope(Event).date_search(params[:search][:date])
elsif params[:search][:level].present?
@events = policy_scope(Event).level_search(params[:search][:level])
else
@events = policy_scope(Event)
end
@markers = @events.geocoded.map do |event|
{
lat: event.latitude,
lng: event.longitude
}
end
end
这些是我的过滤器
<div id="collapseFilters" class="container collapse form">
<%= simple_form_for :search, url: events_path, method: "GET", html: { class: 'form-block' } do |f| %>
<%= f.input :date, as: :string, required: false, input_html: {class: "datepicker"} %>
<%= f.input :level, collection: Event.levels.map{ |l| [l.first, l.second] }, required: false, label_method: :first, value_method: :second%>
<%= f.input :location, required: false, placeholder: 'Enter a location for your event' %>
<%= f.button :submit, 'Search', class: "btn btn-primary btn-lg btn-form mt-3" %>
<% end %>
</div>
如何将它们链接到参数中,以便一次使用多个过滤器?
【问题讨论】:
标签: ruby-on-rails ruby filter