由于我还不熟悉Ruby,我正在努力构建一个优雅的Rails3 / DataMapper项目排序解决方案。
DataMapper示例显示如何使用带有asc
或desc
参数的符号来命令恢复。例如:
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])
它有效,但感觉笨重。我当然做错了。
答案 0 :(得分:4)
我找到了另一种方法,但我不相信这是最好的方式:
sort = DataMapper::Query::Operator.new(params[:sort], params[:sort_dir])
Document.all(:order => [sort])
答案 1 :(得分:1)
或者,您可以尝试使用send
执行某些操作,如下所示:
Document.all(:order => [sort_order.send(params[:sort_dir] == "desc" ? :desc : :asc)])
我认为你的方式更容易理解。