Вы можете использовать String#rpartition
, который ищет заданный шаблон из правого конца строки и разделяется, когда находит его.
'a_b_c_d_e'.rpartition(/_/)
=> ["a_b_c_d", "_", "e"]
s = 'a_b_c_d_e'
parts = s.rpartition(/_/)
[parts.first, parts.last]
=> ["a_b_c_d", "e"]
РЕДАКТИРОВАТЬ: применение советов из комментариев:
'a_b_c_d_e'.rpartition('_').values_at(0,2)
=> ["a_b_c_d", "e"]