Вы используете .humanize
на клавишах, проверьте здесь доки, чтобы понять, что он делает https://api.rubyonrails.org/classes/ActiveSupport/Inflector.html#method-i-humanize
Есть много вариантов сделать то, что вы хотите, я думаю, что лучшая практика - это использовать переводы.
форма (только что перенесла эту логику в помощник, чтобы она стала чище):
<%= select :status, user_training_resource_select_statuses %>
application_helper:
def user_training_resource_select_statuses
UserTrainingResource.statuses.map{|k,v| [I18n.t(k), k]}
end
локаль / en.yml:
en:
pending: Pending
confirmed: Confirmed
rejected: Rejected
removal: Request to Removal
Теперь представление не обрабатывает логику (проще тестировать), это делает помощник. И модуль I18n обрабатывает имена.
Вы можете использовать разные помощники для внешнего и внутреннего интерфейса, один может использовать I18n, а другой - гуманизировать; или вы можете использовать I18n на обоих с одним и тем же помощником и использовать область видимости для обработки разных переводов
<%= select :status, user_training_resource_select_statuses(:frontend) %>
<%= select :status, user_training_resource_select_statuses(:backend) %>
def user_training_resource_select_statuses(scope)
UserTrainingResource.statuses.map{|k,v| [I18n.t(k, scope: scope), k]}
end
en:
frontend:
pending: Pending
confirmed: Confirmed
rejected: Rejected
removal: Removal
backend:
pending: Pending
confirmed: Confirmed
rejected: Rejected
removal: Request to Removal