2013-02-13 37 views
2

在西纳特拉我有简单的辅助返回一个符号:一个简单的西纳特拉/ Ruby的替代

def sort_column 
    params[:sort] ? params[:sort].to_sym : :client_id 
end 

,我的预订被下令:

get '/bookings' do 
    @bookings = Booking.all(order: sort_column) 
    erb :bookings 
end 

我想我的预订需订购ASC或DESC根据另一个辅助的输出:

def sort_direction 
    params[:direction] || "asc" 
end 

此:

@bookings = Booking.all(order: sort_column.asc) 

这:

@bookings = Booking.all(order: sort_column.desc) 

都工作得不错。

但是,如果使用:

@bookings = Booking.all(order: sort_column.sort_direction) 

我得到了一个私有方法的错误,如果我尝试:

@bookings = Booking.all(order: sort_column + "." + sort_direction) 

我得到一个“未定义的方法‘+’的......”错误

如何在sort_direction的结果中替换以确定预订是订购asc还是desc?

感谢

回答

3
Booking.all(order: sort_column.send(sort_direction)) 
+0

这是这样一个迅速的反应凯尔,我甚至不能接受您10分钟的答案。谢谢。 – Adam 2013-02-13 16:30:23

+0

没问题。你明白为什么使用'send'工作吗? – Kyle 2013-02-13 16:34:06

+0

是的,谢谢..我从来没有使用过/听说过send(),但在将它插入我的代码之前查看它(http://ruby-doc.org/core-1.9.3/Object.html#methodi-i -发送) – Adam 2013-02-13 16:36:15