Rails:如何在每个语句上使用过滤器:

时间:2016-08-18 08:32:06

标签: ruby-on-rails

所以我有一个html过滤器框,如下所示:

<label for="datefrom">Date From:</label>
      <input type="date" id="datefrom" class="form-control" name="date" value="dd/mm/yyyy">
      <label for="dateto">Date To:</label>
      <input type="date" id="dateto" class="form-control" name="date" value="dd/mm/yyyy">
      <hr>
      <div class="radio">
        <label><input type="radio" checked name="optradio">All</label>
      </div>
      <div class="radio">
        <label><input type="radio" name="optradio">opt1</label>
      </div>
      <div class="radio">
        <label><input type="radio" name="optradio">opt2</label>
      </div>
      <div class="radio">
        <label><input type="radio" name="optradio">opt3</label>
      </div>
      <div class="radio">
        <label><input type="radio" name="optradio">opt4</label>
      </div>

      <div style="float:right">
        <button class="btn btn-info" name="button">Apply Filters</button>
      </div>

现在我有一个看起来像这样的每个声明

<% @events.each do |event|%>
<div class='positive'>
    <div class='icon'></div>
    <div class='message'><%= event.eventname %></div>
    <div class='date'><%= event.date %> <%= event.time %></div>
    <%= link_to 'Compare', event_path(event.id), class: "button ok" %>
  </div>
<% end %>

所以每个返回大约200个事件,我想要的是日期和日期是一个范围过滤器,它将在过滤器中定义的日期范围内获取每个事件

因此,如果3个事件的日期类似

22/01/2016 23/01/2016 25/01/2016

如果日期范围是在2016年1月21日至2016年1月23日提交的,那么2016年1月22日和2016年1月23日将显示,但其余的不会。

感谢您的帮助!

修改

继承人:

  def search
    @events = Event.page(params[:page]).per(10).search params[:search], suggest: true, misspellings: { distance: 1 }, order: { date: :asc, eventname: :asc }, match: :word_start
    if @events.results.any?
      render 'events/results'
    else
      render 'events/noresults'
    end
  end

萨姆

1 个答案:

答案 0 :(得分:0)

在您的控制器中,您将获得参数中的dateFromdateTo

从那里,您可以使用以下内容过滤您的活动:

@events = Event.where(date: @date_from..@date_to)

然后,您可以像在视图中一样显示您的内容。