首页 > 解决方案 > 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 打球?

标签: ruby-on-railsrails-activerecordruby-on-rails-5.2

解决方案


推荐阅读