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
我正在尝试向我的 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