Конечно, проблема с этим подходом состоит в том, что вы определяете связь между приветствием и id в двух местах.То есть, если вы решите добавить «Доктор» позднее, вы можете сделать это следующим образом:
def salutation_readable
case salutation
when 1
"Herr"
when 2
"Frau"
when 3
"Doktor"
when 4
"Herr und Frau"
end
end
Но не обновлять выбор или обновлять выбор так:
<%= f.select(:salutation, options_for_select([['Herr', 1], ['Frau', 2], ['Herr und Frau', 3], ['Doktor', 4], @customer.salutation_readable)) %>
В любом случае вы получите несоответствие между выбором формы и salutation_readable.
Лично у меня будет соблазн сохранить приветствие в виде строки.
Если вы должны сохранить его с помощью идентификатора, я бы определил связь между идентификатором и приветствием в модели, а затем использовал бы это определение везде.
class User
def self.salutations = {
1 => 'Herr',
2 => 'Frau',
3 => 'Herr und Frau',
4 => 'Doktor'
}
def salutation_readable
self.class.salutations[salutation.to_i]
end
end
Тогда, по вашему мнению, вы могли бысделайте это:
<%= f.select(:salutation, User.salutations.to_a.collect(&:reverse))
Затем его также будет легче расширять, так что User.salutations вызывает отдельный объект Salutation или файл перевода, например.