【发布时间】:2014-10-12 03:40:31
【问题描述】:
我希望 Ransack 始终添加 NULLS LAST,这会将空值放在排序列的最后。
有什么办法吗?
我在这个问题上打开了一个 github 问题:https://github.com/activerecord-hackery/ransack/issues/443
【问题讨论】:
标签: ruby-on-rails ransack
我希望 Ransack 始终添加 NULLS LAST,这会将空值放在排序列的最后。
有什么办法吗?
我在这个问题上打开了一个 github 问题:https://github.com/activerecord-hackery/ransack/issues/443
【问题讨论】:
标签: ruby-on-rails ransack
答案可在上述问题的链接中找到。把它写在这里,这样更容易找到。显然您需要再次构建订单字符串并将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
【讨论】:
ORDER BY tasks.created_at 在订单重写