1

データベースを動的にソートしたいと思います。ソートシーケンスはルビーハッシュに保存されます-

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 に答える