Я предполагаю, что нет другого способа, кроме использования .to_i
при чтении значений из profile_params
.
Перечисления сложны, потому что вы можете использовать их либо по ключу, либо по значению.
Предполагая, что ваше перечисление:
Client.marital_statuses
# => {"single"=>0, "married"=>1, "divorced"=>2, "separated"=>3, "widowed"=>4}
Присвоение с использованием значения (индекса):
c1 = Client.new
c1.marital_status = 0
c1.marital_status
# => "single"
c1.marital_status_before_type_cast
# => 0
Присвоение с использованием ключа (имя):
c2 = Client.new
c2.marital_status = 'married'
c2.marital_status
# => "married"
c2.marital_status_before_type_cast
# => "married"
Я думаю, что это причина, по которой Rails не приводит String к Integer, потому что он не знает, что он должен использовать значение (index) вместо ключа (name).
c3 = Client.new
c3.marital_status = '0'
# Traceback (most recent call last):
# 2: from (irb):6
# 1: from (irb):7:in `rescue in irb_binding'
# ArgumentError ('0' is not a valid marital_status)