Ruby on rails 利用搜救手段进行有序施放
我正在使用ransack自动生成“order by”标题列 我有一个模型客户机,客户机有一个文档,其中包含一个名为number的attr: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客户端
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
呢?我只关心可以解析为数字的值,其余的值可以在开始或结束时出现