JSON属性处理模式重构:如何实现可传属性名的通用清洗方法
问题核心原因
- 调用方法时参数类型错误:直接写
ingredients会被Ruby判定为未声明的局部变量,你需要传入属性对应的符号/字符串作为参数。 - 方法内部取值逻辑错误:
array_element[:element_attribute]是固定取名为element_attribute的键,没有使用你传入的element_attribute参数值。
修正后的基础实现
def empty_and_clean(array_element, element_attribute) return nil if array_element[element_attribute].nil? clean_str = array_element[element_attribute].tr('*$+!@#Â', ' ') clean_str.downcase.capitalize end
正确调用方式
如果你的hash是符号键,调用时传入符号即可:
ingredients = empty_and_clean(article, :ingredients)
如果是JSON解析生成的字符串键,传入字符串即可:
ingredients = empty_and_clean(article, "ingredients")
兼容精简写法
使用Ruby 2.3+支持的安全导航运算符&.可以简化分支逻辑,同时兼容符号、字符串两种键类型:
def empty_and_clean(array_element, element_attribute) # 同时兼容字符串键和符号键取值 val = array_element[element_attribute.to_s] || array_element[element_attribute.to_sym] # 安全导航运算符会在值为nil时直接返回nil,无需额外判空 val&.tr('*$+!@#Â', ' ')&.downcase&.capitalize end
内容的提问来源于stack exchange,提问作者Jerome
相关产品推荐
相关产品推荐

