我们想要动态地对数据库进行排序。排序顺序存储在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">
也就是说,所有列都以“降序”顺序排序(最后一个'方向'给定)
我们如何确保查询与给定的哈希匹配?此外,如果这可以以更好的方式完成,那将非常非常有用。
答案 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