Rails中字符串哈希键自动转symbol导致apply_sort取值失败如何解决
解决方案
方案1:使用Rails原生无感哈希(推荐)
调用generate_csv_for_x前将sort参数转为ActiveSupport::HashWithIndifferentAccess类型,该类型是Rails内置的工具类,专门用于解决参数键符号/字符串不兼容问题,支持两种类型键混用查询,完全兼容原有apply_sort的取值逻辑,无需修改任何历史业务代码,性能和原生哈希差异极小,无额外业务风险。
示例代码:
# 你的原始入参,不管是符号键还是字符串键都可以 raw_sort = { on: "date", direction: "desc" } # 转换后传入函数 generate_csv_for_x(sort: raw_sort.with_indifferent_access)
方案2:构造双类型键哈希
如果上层逻辑会强制转换/过滤哈希键,可直接构造同时包含符号键和字符串键的哈希作为入参,保证values_at用字符串取值时永远能命中:
compatible_sort = { on: "date", "on" => "date", direction: "desc", "direction" => "desc" } generate_csv_for_x(sort: compatible_sort)
方案3:自定义兼容哈希类(极端场景用)
如果上层逻辑会自动删除字符串键,可自定义哈希子类重写values_at方法,自动适配字符串类型的查询参数:
class SortCompatHash < Hash def values_at(*keys) keys.map { |k| self[k] || self[k.to_sym] } end end # 使用时转换原始哈希即可 sort = SortCompatHash[{ on: "date", direction: "desc" }] generate_csv_for_x(sort: sort)
内容的提问来源于stack exchange,提问作者Ben Garcia
相关产品推荐
相关产品推荐

