опция подсказки не работает с select_tag - PullRequest
0 голосов
/ 24 мая 2018

Если в marital_status есть значение, приглашение не должно отображаться, но в моем случае оно отображается.Мой код указан ниже.Пожалуйста, помогите.

= select_tag( 'request[marital_status]', 
options_for_select(marital_status_options,
@employee.marital_status.try(:upcase)), prompt: "Select Marital Status", id: 'employee_marital_status', disabled: @request.submitted?)

In employee_helper.rb

def marital_status_options
  Employee::MaritalStatus::ALL.zip(Employee::MaritalStatus::ALL)
end

В модели сотрудника

module MaritalStatus
  MARRIED = 'MARRIED'
  SINGLE = 'SINGLE'
  DIVORCED = 'DIVORCED'
  ALL = [MARRIED, SINGLE, DIVORCED]
end

Ответы [ 3 ]

0 голосов
/ 24 мая 2018
= select_tag "request[marital_status]", options_for_select(Employee.marital_status_options,
@employee.marital_status.try(:upcase)), :include_blank => '--Select Marital Status--', id: id: 'employee_marital_status', disabled: @request.submitted?

Хорошей практикой является определение marital_status_options (бизнес-логики) внутри модели: -

Предполагается, что это модель Employee

def self.marital_status_options
  [
    ["MARRIED","MARRIED"],
    ["SINGLE","SINGLE"],
    ["DIVORCED", "DIVORCED"]
  ]
end

Причина, по которой не выбран параметр по умолчанию marital_status:потому что если @employee.marital_status.try(:upcase) не будет совпадать ни с одним из marital_status_options, он покажет ваш параметр prompt, поэтому проверьте его внимательно, чтобы, если @employee.marital_status.try(:upcase) соответствует любому из заданных параметров параметра тега select.

0 голосов
/ 24 мая 2018

Ты очень близко.Проблема здесь, вероятно, связана с вашим 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?)

Надеюсь, что это поможет - дайте мне знать, если у вас есть какие-либо вопросы или вам нужно что-нибудь еще.

0 голосов
/ 24 мая 2018

Формат и использование правильные.Пожалуйста, убедитесь, что @employee.marital_status.try(:upcase) точно соответствует одному из marital_status_options, приведенному здесь.

Это выглядит как вероятный случай для такого поведения.

Кроме того, первый аргумент, ожидаемый в select_tag, долженв соответствующем формате, в данном случае это массив строк.

Следовательно, ваш метод marital_status_options должен возвращать массив опций, которые будут использоваться для раскрывающегося списка.

def marital_status_options
  ['MARRIED', 'SINGLE', 'DIVORCED']
end
...