续集中的动态排序

时间:2012-07-11 07:17:39

标签: ruby sequel

我们想要动态地对数据库进行排序。排序顺序存储在ruby散列中 -

sortorder = [
  {
    'property'  => 'company',
    'direction' => 'asc'
  },
  {
    'property'  => 'name',
    'direction' => 'asc'
  },
  {
    'property'  => 'id',
    'direction' => 'desc'
  }
]

我们正在尝试构建这样的查询 -

query = DB[:contacts]
sortorder.each do |s|
  column = s['property']
  direction = s['direction'].downcase

  if direction == 'asc'
    query = query.order_append(column.to_sym)
  else
    query = query.order_append(column.to_sym).reverse
  end
end

但是,查询显示如下

#<Sequel::SQLite::Dataset: "SELECT * FROM `contacts` ORDER BY `company` DESC, `name` DESC, `id` DESC">

也就是说,所有列都以“降序”顺序排序(最后一个'方向'给定)

我们如何确保查询与给定的哈希匹配?此外,如果这可以以更好的方式完成,那将非常非常有用。

1 个答案:

答案 0 :(得分:1)

reverse正在撤消所有订单。您必须为每个订单传递指示:

query = DB[:contacts]
sortorder.each do |s|
  column = s['property']
  direction = s['direction'].downcase

  query = query.order_append(column.to_sym.send(direction.to_sym))
end