我需要做这样的事情:
Place.order('distance_km(?, ?, latitude, longitude)', params[:lat], params[:long])
distance_km是Postgresql中的一个过程。 order
方法不接受此自定义字符串。
我怎样才能做到这一点?
提前致谢!
答案 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