我正在使用Ransack来搜索某些数据,但是,我发现的是搜索后不会保留排序。它将恢复为我的控制器中指定的默认排序。
方案是:我按列排序,让我们说收入,然后执行搜索,收入的排序被删除,并返回到我在控制器中设置的默认排序。
这是我的控制器代码:
def index
@q = Product.ransack(params[:q])
@q.sorts = 'start_date desc' if @q.sorts.empty?
@products = @q.result.page(params[:page]).per(30)
end
我对代码if sorts.empty?
的理解是,如果我已经对某些内容进行了排序,则不会应用此默认排序。情况不是这样吗?
谢谢!
答案 0 :(得分:0)
我找到的最佳解决方案是使用隐藏字段手动将:s
字段添加到搜索表单中:
<%= search_form_for(@q, url: search_url) do |f| %>
<%= f.hidden_field :s, value: params[:q].try(:[], :s) %>
<%= f.text_field :foo_eq %>
<% end %>
通过这样做,:s
字段在呈现搜索表单时始终使用正确的参数更新。不手动设置值时它不起作用,因为@q.s
是@q.sorts
的别名,它返回一个对象而不是排序字符串。