如何配置Ransack Rails Gem以添加NULLS LAST进行排序

我希望Ransack总是添加NULLS LAST ,它会将空值放在排序列的最后。

有什么办法吗?

我在这个问题上打开了一个github问题: https : //github.com/activerecord-hackery/ransack/issues/443

答案可以在上面问题中链接的主题中找到。 在这里写它所以更容易找到。 显然你需要再次构建订单字符串并添加Null Last

这解决了它(适用于所有列):

 @q.result.except(:order).order("#{@q.sorts.first.name} #{@q.sorts.first.dir} NULLS LAST") 

但是,当您没有任何排序参数时,您需要将其排除,因此这是我的最终解决方案:

 @q = Project.ransack(params[:q]) @fields = current_user.settings.default_project_fields if @q.sorts.present? @result = @q.result.except(:order).order("#{@q.sorts.first.name} #{@q.sorts.first.dir} NULLS LAST") else @result = @q.result end