通常當我使用“ titles.where(status: 1).order("name")”時,它會正確地對標題進行排序,例如:
"1. title one"
"2. title two"
但是當標題如下:
"1.1. Random title"
當它應該在“1. 標題一”之后和“2. 標題二”之前,這會將它放在排序的末尾。我能在那里做什么?
uj5u.com熱心網友回復:
您可以做的是通過將第一部分轉換為十進制然后根據該列進行排序來對其進行排序。像這樣的東西
titles.where(status: 1).order("cast(left(name,LOCATE('. ',name,1)-1) as decimal(5,2))")
這將做的是
- 洗掉后面和包括的名稱中的所有內容
. - 將剩余的名稱轉換為十進制
- 然后根據該值排序
uj5u.com熱心網友回復:
這應該這樣做:
titles.where(status: 1).sort_by{|title| title.name.split(" ").first.to_f}
本質上,它是通過獲取第一個數字并將其轉換為浮點數以進行排序來創建自定義排序
uj5u.com熱心網友回復:
您的代碼似乎已經按預期作業。例如,如果您運行此代碼,它將給出如圖所示的結果:
titles = Title.where(status: 1).order("name").map(&:name)
puts titles.join("\n")

轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/361362.html
標籤:红宝石轨道
