【问题标题】:Ransack sorting not maintained after search, goes back to default sort搜索后不维护 Ransack 排序,返回默认排序
【发布时间】:2023-04-06 10:39:01
【问题描述】:

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

谢谢!

【问题讨论】:

  • 您好,您找到解决问题的方法了吗?我有同样的问题.. :(
  • 嘿@EdgarsRozenfelds 我还没有找到解决方案.. 如果你找到了请告诉我

标签: ruby-on-rails sorting ransack


【解决方案1】:

我为此找到的最佳解决方案是使用隐藏字段手动将 :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 的别名,它返回一个对象而不是排序字符串。

【讨论】: