2012-07-11 79 views
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"> 

也就是說,所有列按「降序」順序排列(最後'方向'給出)

我們如何確保查詢與給定的散列匹配?另外,如果這可以以更好的方式完成,它將非常非常有幫助。

回答

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 
+0

謝謝斯蒂芬。你是一個救星! – globetrotter 2012-07-11 07:56:29