我最近升级到Rails 5.2.X,现在收到此弃用警告:
DEPRECATION警告:危险的查询方法(其参数的方法 用作原始SQL),并使用非属性参数调用: “ LOWER(projects.name)desc”。非属性参数将是 在Rails 6.0中不允许使用。这种方法不应该被称为 用户提供的值,例如请求参数或模型的属性。 可以通过将已知安全值包装在Arel.sql()中来传递这些值。
我知道正在讨论此弃用消息here。
但是我仍然在为正确的语法而苦苦挣扎。
这是我的方法:
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
但是我仍然收到相同的弃用警告。
我在这里想念什么?
答案 0 :(得分:1)
您能尝试一下吗?
.order(
Arel::Nodes::NamedFunction.new('lower', [unique_sort_column])
)
我认为这是引发警告的原因,因为您传递给Arel的字符串中的字符串插值(可能不是这样解析的。)
我从scuttle.io那里抢了下来,将默认查询修改为lower(author)
进行排序,并在本地进行了测试,用变量名代替了author。它不会发出警告。