到目前为止,从数据库中获取随机记录的“常规”方法是:
# Postgress
Model.order("RANDOM()").first
# MySQL
Model.order("RAND()").first
但是,在Rails 5.2中这样做时,会显示以下弃用警告:
DEPRECATION WARNING:使用危险查询方法(其参数用作原始SQL)调用非属性参数:"RANDOM()"。在Rails 6.0中将禁止使用非属性参数。不应该使用用户提供的值调用此方法,例如请求参数或模型属性。可以通过将已知安全值包装在Arel.sql()中来传递它们。
我对Arel并不是很熟悉,所以不确定修复此问题的正确方法。
Arel.sql
声明是否更安全?.order('RAND())'
对我来说完全没问题 - 你能详细解释一下吗? - davegsonArel.sql
调用中,你会收到一个弃用警告(在下一个版本中将变成异常),所以你没有太多选择。仅仅将某些东西包装在Arel.sql
中并不能使任何东西更安全,它只是让你更努力地去射自己的脚。 - mu is too short