2011-09-19 130 views
0

我的表模型看起來像這樣排序字典哈希

模型NiceFile

name:string 
file_type:integer 

然後我有一個像

{1=>'aaa', 2=>'bbb', 3=>'ccc'} 

我如何可以按本詞典下令記錄的字典嗎?

+0

您的哈希鍵是否意味着'file_type'值?你想要在數據庫內還是在數據庫外面進行排序? –

+0

是的,鍵是file_types。我喜歡簡單解決方案。 – blyp

+0

事情不按字典排序 - 你想按鍵或價值排序的東西? –

回答

0

如果你想在Ruby中進行排序,那麼你可以做這樣的事情:

ordering = {1=>'aaa', 2=>'bbb', 3=>'ccc'} 
files = NiceFile.where(...).sort_by { |n| ordering[n.file_type] } 

where(...),當然,只是一個佔位符,你需要做的就是你NiceFiles什麼AR的事情。只要您的數據庫操作都不關心排序,這將工作正常;在實踐中,這意味着它通常沒問題,除非您計劃使用limitoffset來抓取數據庫結果的一部分。

如果您需要在數據庫中使用您的自定義排序,那麼您希望將您的散列放入一個表格(如ordering_table),加入它並對值進行排序。事情是這樣的:

files = NiceFile.where(...). 
       joins('left join ordering_table on nice_file.file_type = ordering_table.file_type'). 
       order('coalesce(nice_file.order_pos, 1000)'). 
       limit(11) 

的​​3210和left join在那裏如果你有nice_file.file_type值不在你ordering_table