我尝试按长度排序单位列表,然后按字母顺序排序。如果按字母顺序排序,我会得到一份表单
Troop 1
Troop 11
Troop 111
Troop 1111
Troop 5
Troop 55
Troop 555
Troop 7
Troop 77
Troop 777
相反,我想
Troop 1
Troop 5
Troop 7
Troop 11
Troop 55
Troop 77
Troop 111
Troop 555
Troop 777
Troop 1111
我认为根据名称长度做一个简单的排序然后按字母顺序命名就可以了,但是我无法对长度进行任何排序。我尝试了一些表格的变体
def index
@title = 'Units'
@units = Unit.paginate(page: params[:page]).order(name: :asc).sort{|x, y| x.name.length <=> y.name.length}
end
无济于事。现在我发现我可能需要拆分空间并按第二个值(即抓取的数字)排序,但我也不知道如何做到这一点。任何帮助将不胜感激!
答案 0 :(得分:2)
在编程中通常称为“自然排序”。
谢天谢地,您不需要在Ruby中执行此操作。 SQL足够强大:
@units = Unit.paginate(page: params[:page]).order("LENGTH(name) ASC, name ASC")