Я успешно установил драгоценный камень Ransack, и он работает в моем приложении как для простого, так и для расширенного поиска. Я пытаюсь добавить для пользователей функцию «Сохранить поиск». По сути, идея заключается в том, что они могут добавить поисковый запрос в закладки и получить к нему доступ позже в любое время.
Я настроил его, создав модель SavedSearch. Когда пользователь сохраняет поиск, он берет params[:q] из своего поиска и сохраняет его в базе данных.
Позже я извлекаю эту запись из базы данных и получаю доступ к запросу. Я пытаюсь воссоздать поиск, передав запрос в ransack, но, похоже, он не работает. Поиск извлекает ВСЕ ЗАПИСИ для этой модели, а не только те, которые соответствуют запросу. Есть идеи, почему? Я думаю, что, возможно, параметры поиска нужно изменить на другой формат, прежде чем передавать их обратно в разыск? Вот мой код:
Вот код из моей модели контроллера (действие advanced_search работает без нареканий, но save_search некорректно фильтрует при повторении запроса):
def advanced_search
@query = params[:q]
@saved_search = SavedSearch.new
@q = Variant.search(params[:q])
@q.build_grouping unless @q.groupings.any?
@variants = params[:distinct].to_i.zero? ?
@q.result.paginate(per_page: 100, page: params[:page]) :
@q.result.includes(:supplier).paginate(per_page: 100, page: params[:page])
respond_with @variants
end
def saved_search
@id = params[:id]
@saved_search = SavedSearch.find(@id)
@query = @saved_search.query_parameters
@distinct = @saved_search.distinct
@q = Variant.search(@saved_search.query_parameters)
@q.build_grouping unless @q.groupings.any?
@variants = @distinct.to_i.zero? ?
@q.result.paginate(per_page: 100, page: params[:page]) :
@q.result.includes(:supplier).paginate(per_page: 100, page: params[:page])
render 'advanced_search'
end
Вот как выглядят параметры поиска из успешного запроса при сохранении в базе данных:
{"g"=>{"0"=>{"m"=>"and", "c"=>{"0"=>{"a"=>{"0"=>{"name"=>"total_revenue"}}, "p"=>"gt", "v"=>{"0"=>{"value"=>"1000"}}}}}}, "s"=>{"0"=>{"name"=>"stock_health", "dir"=>"asc"}}}