Ruby on Rails中location参数不区分大小写的标准化转换求助
实现方案
可以通过标准化输入格式后匹配关键词的方式,统一将各种变体转换为指定的标准格式,以下是两种可行实现:
方式一:使用case语句匹配
# 先对输入做标准化处理:转小写、拆分单词、排序后拼接 normalized_location = params[:location].to_s.downcase.split.sort.join(' ') case normalized_location when 'left pa', 'pa left' 'Left PA' when 'right pa', 'pa right' 'Right PA' else params[:location] # 不符合规则的输入保持原样 end
方式二:使用哈希映射(扩展性更强)
normalized_location = params[:location].to_s.downcase.split.sort.join(' ') # 定义变体到标准格式的映射关系 standard_location_map = { 'left pa' => 'Left PA', 'pa left' => 'Left PA', 'right pa' => 'Right PA', 'pa right' => 'Right PA' } # 匹配映射值,无匹配则返回原输入 standard_location_map[normalized_location] || params[:location]
思路说明
- 标准化处理:通过
downcase统一大小写,split.sort.join消除单词顺序差异,不管输入是「PA Left」「Pa LEFT」还是「pa left」,最终都会被转换成统一的left pa格式。 - 匹配转换:通过case语句或哈希映射,将标准化后的字符串对应到指定的标准输出格式。
- 边界兼容:用
to_s处理params[:location]为nil的情况,避免报错;非目标变体的输入会直接返回原值,不做强制转换。
内容的提问来源于stack exchange,提问作者Kumar Nikhil
相关产品推荐
相关产品推荐

