需要在数据库上运行的自定义排序

时间:2014-11-20 12:58:11

标签: ruby-on-rails postgresql

我需要做这样的事情:

Place.order('distance_km(?, ?, latitude, longitude)', params[:lat], params[:long])

distance_km是Postgresql中的一个过程。 order方法不接受此自定义字符串。

我怎样才能做到这一点?

提前致谢!

1 个答案:

答案 0 :(得分:1)

订单不像条件一样使用?语法。只需将值替换为字符串替换。请注意,您需要使用双引号。

Place.order("distance_km(#{params[:lat]}, #{params[:long]}, latitude, longitude)")

编辑 - 为了防止通过params注入sql,请在params上调用to_f:

Place.order("distance_km(#{params[:lat].to_f}, #{params[:long].to_f}, latitude, longitude)")

xkcd参考:

"Robert'); DROP TABLE Students;--".to_f
=> 0.0

"54.1567'); DROP TABLE Students;--".to_f
=> 54.1567