将正则表达式作为参数写入gsub!方法 - 难倒?

cod*_*red 2 ruby regex gsub ruby-on-rails-4

在我的Rails 4.2.6/Ruby 2.2.4应用程序中,我有一个生成字符串的db查询方法; 例如:

"Chest - pectoralis, Quads - quadriceps, Hamstrings - biceps femoris"
Run Code Online (Sandbox Code Playgroud)

但是,我想要的结果是:

"Chest, Quads, Hamstrings"
Run Code Online (Sandbox Code Playgroud)

该域跟踪21个肌肉群,这意味着生成的字符串可以有许多不同的组合.但是,字符串将始终具有相同的模式,即:"普通肌肉名称 - 技术肌肉名称".

使用条件逻辑,我可以通过将"string"参数传递给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"
Run Code Online (Sandbox Code Playgroud)

这种方法不可行; 这是乏味而脆弱的.必须有更好的方法从生成的字符串中删除破折号和技术名称.我对如何最好地完成这件事感到困惑.是否可以编写正则表达式来实现所需的结果,以及如何?有没有更简单,更好,更清洁的方法来实现我想要做的事情?谢谢!

Las*_*and 5

您可以" -"在地图函数中拆分名称,只返回第一部分,如下所示:

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"
Run Code Online (Sandbox Code Playgroud)