在我的 Rails 4.2.6/Ruby 2.2.4 应用程序中,我有一个生成字符串的数据库查询方法;例如:
"Chest - pectoralis, Quads - quadriceps, Hamstrings - biceps femoris"
然而,我想要的结果是:
"Chest, Quads, Hamstrings"
域跟踪 21 个肌肉群,这意味着生成的字符串可以有很多不同的组合。但是,该字符串将始终具有相同的模式,即:“普通肌肉名称 - 技术肌肉名称”。
使用条件逻辑,我可以通过将“字符串”参数传递给 gsub 方法来获得我想要的结果,如下所示:
if @muscle_group_ids == [1, 13, 14]
@muscle_group_names = MuscleGroup.where(id: @muscle_group_ids).map { |n| n[:name]
}.join(', ').gsub!("Chest - pectoralis", "Chest").gsub!("Quads - quadriceps", "Quads").gsub!("Hamstrings - biceps femoris", "Hamstrings")
end
=> "Chest, Quads, Hamstrings"
这种方法不可行;它既乏味又脆弱。必须有更好的方法来从生成的字符串中删除破折号和技术名称。我对如何最好地完成这项工作感到困惑。是否可以编写一个正则表达式来达到预期的结果,如何实现?是否有更简单、更好、更清洁的方法来实现我想要做的事情?谢谢!
最佳答案
您可以在 map 函数中将名称拆分为 "-"
,然后只返回第一部分,如下所示:
if @muscle_group_ids == [1, 13, 14]
@muscle_group_names = MuscleGroup.where(id: @muscle_group_ids).map { |n|
n = n[:name].split(" -")[0]
}.join(', ')
end
=> "Chest, Quads, Hamstrings"
关于ruby - 编写正则表达式作为 gsub 的参数!方法——难倒?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42818425/