Rails Active Record带有参数的顺序

时间:2014-05-24 21:37:41

标签: sql ruby-on-rails activerecord

有没有办法在Rails中为.order提供参数?您可以为.where提供参数。

例如:

People.where("age > :min_age and age < :max_age", {:min_age => 20, :max_age: 80})

使用.order执行此操作的方式与sql不同。

例如:

Places.order("pow(lat - :mylat,2) + pow(lon-:mylon,2)", {:mylat => 1, :mylon => 2}) 

转换为以下sql,它给出了sql语法错误。

SELECT * FROM places ORDER BY pow(lat - :mylat,2) + pow(lon - :mylon,2) '---\n:mylat: 1\n:mylon: 2\n'

我知道您可以使用.sort_by对数组进行排序。我想知道你是否可以使用Active Record中的.order函数来完成这项工作。

1 个答案:

答案 0 :(得分:2)

长答案:不,不是。

您必须编写自己的实现,严格验证参数值并构建订单字符串

要小心,因为order不会清理参数,与where不同

> User.order('1; select * from users')
=> SELECT `users`.* FROM `users`   ORDER BY 1; select * from users