繁体   English   中英

Rails Active Record带有参数的顺序

[英]Rails Active Record order with parameters

有没有办法在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对数组进行.sort_by 我想知道你是否可以使用Active Record中的.order函数来完成此操作。

长答案简称:不,不是。

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

要小心这一点,因为order不会清理参数,与其他where不同

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM