searchkick 的未定义方法 `where`

undefined method `where` for searchkick

我正在尝试向我的 searchkick 添加日期范围过滤器

这就是我的

    @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 params[:date_from]
      byebug
@events = @events.where('date BETWEEN ? AND ?', params[:date_from], params[:date_to])
    end

但是我遇到的问题是:

*** NoMethodError Exception: undefined method `where' for #<Searchkick::Results:0x007f95eaf97f90>

如有任何帮助,我们将不胜感激

编辑

我知道这在另一个问题中可能更好,但它有点同一个问题

 def search
    @events = Event.page(params[:page]).per(10)
    if params[:date_from]
        @events = @events.where('date between ? AND ?', params[:date_from], params[:date_to])
    byebug
    end

    @events = @events.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'
    end
end

现在这不是我想要的那样工作,我有事件名称、开始日期和要通过参数传递的日期。如果我在 byebug 上键入 @events,它会获取范围内的事件,但不会获取我需要的事件

看起来 searchkick 使用它自己的查询语法。所以这样的事情可能会有所帮助

search_opts = {
  misspellings: { distance: 1 }, 
  order: { date: :asc, eventname: :asc },
  match: :word_start, 
  page: params[:page],
  per_page: 20
}
if params[:date_from]
   search_opts[:where] =  { date: {gte: params[:date_from], lte: params[:date_to]} }
end

@events = Event.search params[:search], search_opts

为什么需要在 .where() 之前调用 .page() 不应该是

def search
  events = Event
  if params[:date_from]
    events = events.where('date between ? AND ?', params[:date_from], params[:date_to])
  end

  events = events.page(params[:page]).per(10)
  @events = events.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'
  end
end