ruby-on-rails - Rails 5.2:使用非属性参数调用的危险查询方法(其参数用作原始 SQL 的方法)
问题描述
我有一个看起来像这样的模型的范围:
scope :indexed_by_array, lambda { |ids|
order = sanitize_sql_array(
["position((',' || id::text || ',') in ?)", ids.join(',') + ',']
)
where(id: ids).order(order)
}
升级到 Rails 5.2 后,它会收到大量弃用警告,例如:
使用非属性参数调用的危险查询方法(其参数用作原始 SQL 的方法):“position((',' || id::text || ',') in ',')”。Rails 6.0 将不允许使用非属性参数。不应使用用户提供的值(例如请求参数或模型属性)调用此方法。可以通过将已知安全值包装在 Arel.sql() 中来传递它们。
如何更改该范围以使用 Rails 5.2 打球?
解决方案
推荐阅读
- go - 使用 gRPC 响应服务的 Go 的 Google Cloud Endpoints 示例失败
- assembly - 汇编调用 printf - WSL 和独立 Ubuntu 18.04 64 位上的不同行为
- java - 无法通过 Android API 22 (Lollipop) 上的套接字发送 ICMP 数据包
- emacs - ccls 是否支持项目范围的调用层次结构?
- python - 实际显示小部件后如何更改 sizeHint?
- ios - 用分隔符转换数字格式,
- php - 为什么 +3 h 的另一个输出是 +3 小时?
- python - 如何替换图像数据的 NaN 值?
- javascript - 具有相同类输入的 JavaScript 多事件处理程序
- python - 未将元素添加到 for 循环中的列表