Ты очень близко.Проблема здесь, вероятно, связана с вашим marital_status_options
методом: он просто вернет DIVORCED
, поскольку он оценивает последнюю строку из-за вашего назначения.
Следовательно, вы можете обнаружить, что значение выбрано, если ваш экземпляр содержит DIVORCED, но не одно из других значений;значение вашего экземпляра должно совпадать с одним из них, чтобы оно было выбрано вместо приглашения.
Вы, вероятно, захотите изменить это:
def marital_status_options
MARRIED = 'MARRIED' # this will be evaluated first
SINGLE = 'SINGLE' # then this
DIVORCED = 'DIVORCED' # finally, this will be evaluated and returned as 'DIVORCED'
end
Для массива: либо
def marital_status_options
['MARRIED', 'SINGLE', 'DIVORCED']
end
Или, чтобы представить опции в нижнем регистре, но сохранить значения в верхнем регистре в БД:
def marital_status_options
[['Married', 'MARRIED'], ['Single', 'SINGLE'], ['Divorced', 'DIVORCED']]
end
Взгляните на документы по options_for_select
и выПосмотрим, кого они могут настроить.
В дальнейшем вы можете подумать о переключении на enums
- это очень удобно для управления такими выборами, как эти, и для автоматического создания методов, таких как Employee.married
, employee.divorced?
и т. Д.
Как уже упоминал кто-то, рекомендуется хранить такие данные в соответствующей модели, хотя я бы сказал, что они должны храниться как константы, поскольку они не будутменятьсяИтак, одно из следующего:
# employee.rb
MARITAL_STATUSES = ['MARRIED', 'SINGLE', 'DIVORCED'].freeze
# or
MARITAL_STATUSES = [['Married', 'MARRIED'], ['Single', 'SINGLE'], ['Divorced', 'DIVORCED']].freeze
= select_tag('request[marital_status]',
options_for_select(Employee::MARITAL_STATUSES,
@employee.marital_status.try(:upcase)),
prompt: "Select Marital Status",
id: 'employee_marital_status',
disabled: @request.submitted?)
Надеюсь, что это поможет - дайте мне знать, если у вас есть какие-либо вопросы или вам нужно что-нибудь еще.