【发布时间】:2018-02-19 09:20:44
【问题描述】:
我使用 Rails 5.1 和 Ransack gem。
在我的 imagecapturings_controller.rb 中,我有一个 before_action :get_imagecapturings 从下拉列表中按月和年过滤:
def get_imagecapturings
@search = Imagecapturing.ransack(params[:q])
if params.has_key?(:select)
if params[:select][:month] == 'all'
@imagecapturings = Imagecapturing.where("YEAR(datum_anfang) = ?", params[:select][:year])
else
@imagecapturings = Imagecapturing.where("MONTH(datum_anfang) = ? AND YEAR(datum_anfang) = ?", params[:select][:month], params[:select][:year])
end
else
@imagecapturings = @search.result
end
end
在我看来,我的表头可以按列升序/降序排序:
<th><%= sort_link(@search, :library) %></th>
但是在用户点击表格列标题时的过滤结果中,页面会重新加载,但列标题升序/降序的排序不起作用。 解码后的 URL 如下所示:
http://localhost:3001/?q[s]=library desc&select[month]=12&select[year]=2017&submit=Filter&utf8=✓
如果 URL 如下所示,则按 asc/desc 排序仅适用于未过滤的结果:
http://localhost:3001/?method=get&q[s]=library asc
我尝试在结果列表上链接 ransack(params[:q]) 没有排序:
@imagecapturings = Imagecapturing.where("YEAR(datum_anfang) = ?", params[:select][:year])
@search = @imagecapturings.ransack(params[:q])
在Rails 3.2 and Ransack - Is it possible to pass additional params in a sort_link?
一位用户建议在 sort_link 中添加额外的参数,我尝试了:
<th><%= sort_link(@search, :library, {:year => params[:select][:year], :month => params[:select][:month]}) %></th>
但它没有排序。
如何修改我的 get_imagecapturings 方法和/或 ransack 的 sort_link 帮助程序,以使其可根据过滤结果排序?
【问题讨论】:
标签: ruby-on-rails