搜索后未保留Ransack排序,返回默认排序

时间:2015-04-28 19:08:31

标签: ruby-on-rails sorting ransack

我正在使用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?的理解是,如果我已经对某些内容进行了排序,则不会应用此默认排序。情况不是这样吗?

谢谢!

1 个答案:

答案 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的别名,它返回一个对象而不是排序字符串。