[英]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.