在rails / ruby​​中查找搜索结果的日期范围内的事件

时间:2016-09-10 13:09:19

标签: ruby-on-rails ruby

我为了让这个工作有点挣扎,我使用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?部分吗?

由于

1 个答案:

答案 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