[英]Rails ransack sort_link on filtered results
I use Rails 5.1 and the Ransack gem.我使用 Rails 5.1 和 Ransack gem。
In my imagecapturings_controller.rb I have a before_action :get_imagecapturings to filter by month and year from a dropdown list:在我的 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
And in my view my table head to make it sortable ascending/descending by columns:在我看来,我的表头可以按列升序/降序排序:
<th><%= sort_link(@search, :library) %></th>
But on the filtered results when a user clicks on the table column header the page is reloaded but the sort on the column header ascending/descending doesn't work.但是,当用户单击表格列标题时,过滤结果会重新加载页面,但对列标题升序/降序的排序不起作用。 The decoded URL looks like this:
解码后的 URL 如下所示:
http://localhost:3001/?q[s]=library desc&select[month]=12&select[year]=2017&submit=Filter&utf8=✓
The sort by asc/desc works only for unfiltered results if the URL looks like this:如果 URL 如下所示,按 asc/desc 排序仅适用于未过滤的结果:
http://localhost:3001/?method=get&q[s]=library asc
My attempt to chain ransack(params[:q]) on the result list doesn't sort:我在结果列表上链接 ransack(params[:q]) 的尝试没有排序:
@imagecapturings = Imagecapturing.where("YEAR(datum_anfang) = ?", params[:select][:year])
@search = @imagecapturings.ransack(params[:q])
In Rails 3.2 and Ransack - Is it possible to pass additional params in a sort_link?在Rails 3.2 和 Ransack 中 - 是否可以在 sort_link 中传递额外的参数?
a user suggests to add additional params into sort_link and I tried it with:用户建议将其他参数添加到 sort_link 中,我尝试了以下方法:
<th><%= sort_link(@search, :library, {:year => params[:select][:year], :month => params[:select][:month]}) %></th>
But it doesn't sort.但它没有排序。
How can I modify my get_imagecapturings method and/or ransack's sort_link helper in view to make it sortable on filtered results?如何修改我的 get_imagecapturings 方法和/或 ransack 的 sort_link 帮助程序,以使其可在过滤结果上排序?
If that is your exact code, your not returning the @search.result
in the if params.has_key?(:select)
statement.如果这是您的确切代码,则您不会在
if params.has_key?(:select)
语句中返回@search.result
。 Your also not chaining your query with ransack.您也没有将您的查询与洗劫联系起来。 Try something like:
尝试类似:
@search = Imagecapturing.ransack(params[:q])
query = @search.result
if params.has_key?(:select)
if params[:select][:month] == 'all'
@imagecapturings = query.where("YEAR(datum_anfang) = ?", params[:select][:year])
else
@imagecapturings = query.where("MONTH(datum_anfang) = ? AND YEAR(datum_anfang) = ?", params[:select][:month], params[:select][:year])
end
end
I'd probably be inclined to try using some custom ransackers so you don't have to do custom view code and can stick with ransack entirely https://github.com/activerecord-hackery/ransack/wiki/using-ransackers there's some examples of converting dates like your doing.我可能倾向于尝试使用一些自定义的 ransackers,因此您不必执行自定义视图代码,并且可以完全坚持使用 ransack https://github.com/activerecord-hackery/ransack/wiki/using-ransackers有一些像您一样转换日期的示例。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.