我为了让这个工作有点挣扎,我使用searchkick在我的网站上有一个有效的搜索功能。
但我想让我的用户在结果页面上过滤结果。
这是我的控制器供参考:
def search
@events = Event.page(params[:page]).per(10).search(params[:search], misspellings: { distance: 1 }, order: { date: :asc, eventname: :asc }, match: :word_start, page: params[:page], per_page: 20)
if @events.results.any?
render 'events/results'
else
@popevents = Event.limit(3).order('RANDOM()')
render 'events/noresults'
end
end
现在我想要的是视图中的一个简单的日期选择器,允许用户搜索返回的事件的日期范围(往返)然后提交它将仅返回该范围内的事件。我看过filterrific但是很困惑,并不确定那是我真正需要的吗?
非常感谢任何帮助!
修改
所以,如果我有这个:
<label for="datefrom">Date From:</label>
<input type="date" id="datefrom" class="form-control" name="datefrom" value="dd/mm/yyyy">
<label for="dateto">Date To:</label>
<input type="date" id="dateto" class="form-control" name="dateto" value="dd/mm/yyyy">
<div style="float:right">
<button class="btn btn-info" name="button">Apply Filters</button>
</div>
我想知道我需要在按钮上放什么,控制器中的位还会进入if @events.results.any?
部分吗?
由于
答案 0 :(得分:1)
您可以这样做:
在视图中,将date_pickers输入如下:
<%= form_tag your_search_path, method: :post do%>
# here your datepicker content
<%= submit_tag 'Send' %>
<% end %>
在您的控制器中:
def search
@events = Event.page(params[:page]).per(10).search(params[:search], misspellings: { distance: 1 }, order: { date: :asc, eventname: :asc }, match: :word_start, page: params[:page], per_page: 20)
@events = @events.where(created_at: (Time.parse(params[:datefrom])..Time.parse(params[:dateto]))
if @events.results.any?
render 'events/results'
else
@popevents = Event.limit(3).order('RANDOM()')
render 'events/noresults'
end
end