我桌子上的标题看起来像这样:
"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"
如何解决这个问题?
答案 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"]