简体   繁体   English

未定义的方法`where` for searchkick

[英]undefined method `where` for searchkick

I'm trying to add a date range filter to my searchkick 我正在尝试将日期范围过滤器添加到我的搜寻提示

This is what i have 这就是我所拥有的

    @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

However the issue i'm getting is this: 但是我遇到的问题是:

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

Any help would be greatly appreciated 任何帮助将不胜感激

Edit 编辑

I know this is potentially better in another question but its kinda the same question 我知道这在另一个问题中可能会更好,但是有点一样

 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

Now this isn't working how i want it, I've got the event name, the datefrom and to being passed through on the params. 现在这不符合我的要求,我有事件名称,datefrom和传递给参数。 If i type @events on the byebug it gets events in the range, but doesnt get the event i need 如果我在byebug上键入@events ,它将获取该范围内的事件,但不会获取我需要的事件

it looks like searchkick uses it's own query syntax. 看起来searchkick使用了它自己的查询语法。 so something like this might help 所以像这样的事情可能会有所帮助

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

Why do you have a need to call .page() before .where() Shouldnt it be 为什么需要在.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

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM