【问题标题】:Sort by dictionary hash按字典哈希排序
【发布时间】:2011-09-19 07:21:03
【问题描述】:

我的表格模型是这样的

模型 NiceFile

name:string
file_type:integer

然后我有一本像

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

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

【问题讨论】:

  • Hash 中的键是file_type 值吗?你想在数据库内部还是在数据库外部进行排序?
  • 是的,键是文件类型。我喜欢简单的解决方案。
  • 事物不是按字典排序的——你想要按键排序还是按值排序?

标签: ruby-on-rails database activerecord


【解决方案1】:

如果你想在 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)

coalesceleft join 存在,以防您的 nice_file.file_type 值不在您的 ordering_table 中。

【讨论】:

    猜你喜欢
    • 2010-10-20
    • 2013-09-16
    • 1970-01-01
    • 2014-10-27
    • 2011-06-10
    • 2011-05-19
    • 1970-01-01
    • 2018-11-15
    • 2016-11-21
    相关资源
    最近更新 更多