2011-03-21 132 views
3

因爲我還不熟悉Ruby,所以我一直在努力爲我的Rails3/DataMapper項目中的排序構造一個優雅的解決方案。設置DataMapper:查詢字符串參數中的命令參數

DataMapper示例顯示如何使用帶有ascdesc參數的符號來排序restuls。例如:

Document.all(:order => [:created_at.desc]) 

什麼將params[:sort]params[:direction]轉換爲DataMapper的可接受的格式最好的方法是什麼?

由於缺乏一個更好的主意,這是我到目前爲止有:

sort_order = (params[:sort] || 'created_at').to_sym 
sort_obj = params[:sort_dir] == 'desc' ? sort_order.desc : sort_order.asc 
Document.all(:order => [sort_obj]) 

它的工作原理,但感覺笨重。我當然做錯了。

回答

4

我找到了另一種方式來做到這一點,但我不相信這是最好的一段路要走:

sort = DataMapper::Query::Operator.new(params[:sort], params[:sort_dir]) 
Document.all(:order => [sort]) 
1

或者,你可以嘗試做一些與send,像這樣:

Document.all(:order => [sort_order.send(params[:sort_dir] == "desc" ? :desc : :asc)]) 

我認爲你的方式更容易理解。