我的桌子模型看起来像这样
模型NiceFile
name:string
file_type:integer
然后我有一个像
这样的词典{1=>'aaa', 2=>'bbb', 3=>'ccc'}
如何对此词典排序的记录进行排序?
答案 0 :(得分:0)
如果你想用Ruby排序,那么你可以这样做:
ordering = {1=>'aaa', 2=>'bbb', 3=>'ccc'}
files = NiceFile.where(...).sort_by { |n| ordering[n.file_type] }
where(...)
当然只是一个占位符,无论您需要做什么AR来获取NiceFiles。只要没有数据库操作关心排序,这将正常工作;在实践中,这意味着它通常会很好,除非您计划使用limit
和offset
来获取数据库结果的一部分。
如果您需要在数据库中使用自定义排序,那么您需要将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)
coalesce
和left join
可以防止您nice_file.file_type
中有ordering_table
个值。