有没有办法在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函数来完成这项工作。
答案 0 :(得分:2)
长答案:不,不是。
您必须编写自己的实现,严格验证参数值并构建订单字符串
要小心,因为order
不会清理参数,与where
不同
> User.order('1; select * from users')
=> SELECT `users`.* FROM `users` ORDER BY 1; select * from users