我最近升级到Rails 5.2.X,现在收到此弃用警告:
弃用警告:危险的查询方法(其参数的方法 用作原始 SQL),使用非属性参数调用: "下(projects.name)描述"。非属性参数将是 在 Rails 6.0 中是不允许的。不应使用 调用此方法 用户提供的值,例如请求参数或模型属性。 已知安全值可以通过将它们包装在 Arel.sql() 中来传递。
我知道这里正在讨论此弃用消息。
但我仍然在为正确的语法而苦苦挣扎。
这是我的方法:
def optimized_sort_column
column_type == :string ? "LOWER(#{unique_sort_column})" : unique_sort_column
end
我试图将其更改为:
def optimized_sort_column
column_type == :string ? Arel.sql("lower(#{unique_sort_column})") : unique_sort_column
end
但我仍然收到相同的弃用警告。
我在这里错过了什么?
你能试试这个吗:
.order(
Arel::Nodes::NamedFunction.new('lower', [unique_sort_column])
)
我认为它抛出了警告,因为您传递给 Arel 的字符串内的字符串插值(可能不会以这种方式解析)。
我抓住了 scuttle.io,将默认查询修改为按lower(author)
排序,并在本地测试,用变量名称代替作者。它不会引发警告。