如何订购包含数字的标题表?

时间:2016-10-18 11:58:44

标签: ruby-on-rails ruby

我桌子上的标题看起来像这样:

"Title 100"
"Title 17"
"Title 2"
"Title 23"

我想点如下订购:

"Title 2"
"Title 17"
"Title 23"
"Title 100"

当我使用Post.order("title ASC").each { |post| puts post.title }时,我得到了以下结果:

"Title 100"
"Title 17"
"Title 2"
"Title 23"

如何解决这个问题?

4 个答案:

答案 0 :(得分:0)

您可以按照模型中定义的自定义方法进行排序。

Post.all.sort_by(&:custom_post_sort)

发布模型

def custom_post_sort
  title.scan(/\d/).join('').to_i
end

答案 1 :(得分:0)

它将以asc顺序返回titles数组。

 Post.pluck(:title).sort_by { |x| x[/\d+/].to_i }

答案 2 :(得分:0)

如果帖子的标题始终以“标题”开头,您可以试试这个,

Post.order("CONVERT(SUBSTR(title,3),SIGNED INTEGER)")

答案 3 :(得分:0)

升序:

> Post.pluck(:title).sort_by{|e| e[/\d+/].to_i}
#=> ["Title 2", "Title 17", "Title 23", "Title 100"]

降序:

 > Post.pluck(:title).sort_by{|e| -e[/\d+/].to_i}
 #=> ["Title 100", "Title 23", "Title 17", "Title 2"]