【发布时间】:2015-10-10 16:19:25
【问题描述】:
我已成功安装 Ransack gem,并让它在我的应用程序中用于简单和高级搜索。我正在尝试为用户添加一项功能以“保存搜索”。本质上,他们的想法是他们可以为搜索查询添加书签,并在以后随时访问它。
我通过创建 SavedSearch 模型来设置它。当用户保存搜索时,它会从他们的 ransack 搜索中获取 params[:q] 并将其存储在数据库中。
稍后我从数据库中提取这条记录,并访问查询。我尝试通过将查询传递给 ransack 来重新创建搜索,但它似乎不起作用。搜索会提取该模型的所有记录,而不仅仅是那些适合查询的记录。知道为什么吗?我在想也许搜索参数需要修改为不同的格式,然后再将它们传回洗劫?这是我的代码:
这是来自我的控制器模型的代码(advanced_search 操作完美无缺,但在回收查询时 saved_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"}}}
【问题讨论】:
标签: ruby-on-rails ruby-on-rails-4 ransack