按长度对分页列表进行排序,然后在RoR应用程序中按字母顺序排序

时间:2016-09-05 16:35:49

标签: ruby-on-rails sorting

我尝试按长度排序单位列表,然后按字母顺序排序。如果按字母顺序排序,我会得到一份表单

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

无济于事。现在我发现我可能需要拆分空间并按第二个值(即抓取的数字)排序,但我也不知道如何做到这一点。任何帮助将不胜感激!

1 个答案:

答案 0 :(得分:2)

在编程中通常称为“自然排序”。

谢天谢地,您不需要在Ruby中执行此操作。 SQL足够强大:

@units = Unit.paginate(page: params[:page]).order("LENGTH(name) ASC, name ASC")