Ruby on rails 利用搜救手段进行有序施放

Ruby on rails 利用搜救手段进行有序施放,ruby-on-rails,ruby,postgresql,ruby-on-rails-4,ransack,Ruby On Rails,Ruby,Postgresql,Ruby On Rails 4,Ransack,我正在使用ransack自动生成“order by”标题列 我有一个模型客户机,客户机有一个文档,其中包含一个名为number的attr: class Client < User has_one :document end class Document belongs_to :client end class客户端

我正在使用ransack自动生成“order by”标题列

我有一个模型客户机,客户机有一个文档,其中包含一个名为number的attr:

class Client < User

has_one :document

end

class Document 

belongs_to :client

end
class客户端
我有一个带有两个模型属性的表视图:

<th> <%= sort_link @search, :email, "Email"  %></th>
<th> <%= sort_link @search, 'profile_first_name', "Name"  %></th>
<th> <%= sort_link @search, 'document_number', "ID"  %></th>

我的问题是,‘document_number’是数据库中的一个
字符串
字段,因此,如果我有3个用户的“1”“100”“2”,我需要订单:

12100

但是我得到了
1100 2


注意:我也可以在这个字段中有字母,如“A123”,我不关心顺序在这种情况下,我使用Postgres和rails 4.1

我解决了这个问题,并混合使用Postgres的顺序字符串和长度函数Posgrest

因此,为了简化,我可以做:

Client.joins(:document).order("LENGTH(documents.number) ASC, documents.number").pluck(:number)
并获取
[“1”、“2”、“22”、“99”、“100”…


一个简单的解释

尝试使用
对字符串值使用“不在乎”你的意思是说排序时应将
'A1'
'B1'
视为相等?那么
'A1B1'
A11
呢?我只关心可以解析为数字的值,其余的值可以在开始或结束时出现