按字典散列排序

时间:2011-09-19 07:21:04

标签: ruby-on-rails database activerecord

我的桌子模型看起来像这样

模型NiceFile

name:string
file_type:integer

然后我有一个像

这样的词典
{1=>'aaa', 2=>'bbb', 3=>'ccc'}

如何对此词典排序的记录进行排序?

1 个答案:

答案 0 :(得分:0)

如果你想用Ruby排序,那么你可以这样做:

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

where(...)当然只是一个占位符,无论您需要做什么AR来获取NiceFiles。只要没有数据库操作关心排序,这将正常工作;在实践中,这意味着它通常会很好,除非您计划使用limitoffset来获取数据库结果的一部分。

如果您需要在数据库中使用自定义排序,那么您需要将Hash放入表格(例如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)

coalesceleft join可以防止您nice_file.file_type中有ordering_table个值。