我在控制器中有以下内容以启用will_paginate排序:
def sort_column
['name', 'scheduled', 'status'].include?(params[:sort]) ? params[:sort] : "scheduled"
end
def sort_direction
%w[asc desc].include?(params[:direction]) ? params[:direction] : "desc"
end
这些由表格列顶部的<%= sortable "status", "Status" %>
补充 - 点击此列将对表格进行排序。
如何将某些列默认为ASC,而某些列默认为DESC?
基于文本的列在ASC排序下运行良好。但是,如果我有百分比或数字的列,有时我想显示最佳/最高的第一,而不是要求用户单击两次以按照他们想要的方式对列进行排序。
答案 0 :(得分:1)
使用默认排序定义哈希,从那里抓取未设置的排序:
def sort_direction
sort_defaults = { 'name' => 'asc', 'age' => 'desc', 'scheduled' => 'asc' }
sort_defaults.has_value?(params[:direction]) ? params[:direction] : sort_defaults[sort_column]
end
答案 1 :(得分:0)
想出来了!
这是来自Railscast#228和#240的原始application_helper.rb
代码。
def sortable(column, title = nil)
title ||= column.titleize
css_class = column == sort_column ? "current #{sort_direction}" : nil
if direction == "desc"
direction = column == sort_column && sort_direction == "desc" ? "asc" : "desc"
else
direction = column == sort_column && sort_direction == "asc" ? "desc" : "asc"
end
link_to title, params.merge(:sort => column, :direction => direction, :page => nil), {:class => css_class}
end
我将其更改为(第1行和第4行的更改):
def sortable(column, title = nil, direction = nil)
title ||= column.titleize
css_class = column == sort_column ? "current #{sort_direction}" : nil
direction ||= column == sort_column && sort_direction == "asc" ? "desc" : "asc"
link_to title, params.merge(:sort => column, :direction => direction, :page => nil), {:class => css_class}
end
这使我现在可以在列标题中指定默认方向:
<div class="col>
<%= sortable "priority_number", "Priority", "desc" %>
</div>