1

我们想要动态地对数据库进行排序。排序序列存储在 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">

也就是说,所有列都按“降序”排序(给出的最后一个“方向”)

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

4

1 回答 1

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
于 2012-07-11T07:38:05.687 回答