Необязательный параметр time_select с параметром allow_blank по умолчанию равен 00:00.

Я пытаюсь сделать поле времени в моей форме необязательным. Я делаю это:

<%= f.time_select :end_time, minute_step: 5, include_blank: true %>

Однако, когда оно отправлено, поскольку по умолчанию информация о дате отправляется автоматически с помощью time_select, это выглядит так:

end_time(1i): '2000' end_time(2i): '1' end_time(3i): '1' end_time(4i): '' end_time(5i): ''

Rails интерпретирует это как реальную дату и устанавливает end_time на 00:00

Есть ли какое-либо исправление / тренировка, чтобы иметь возможность иметь дополнительное поле времени? Я попробовал это в контроллере:

if params[:event][:end_time] && params[:event][:end_time][:hour].blank? && params[:event][:end_time][:minute].blank?
  params[:event][:end_time] = nil
end

Но это, похоже, не работает.

Любая помощь приветствуется!

Ответы на вопрос(2)

Следуя тому же принципу, кое-что, что хорошо сработало для меня, было следующим:

Добавить фильтр до / действие в контроллер

before_filter :filter_blank_end_time, only: [:create, :update]

Создать фильтр

def filter_blank_end_time
    if params[:event]['end_time(4i)'].blank?
        params[:event]['end_time(1i)'] = ""
        params[:event]['end_time(2i)'] = ""
        params[:event]['end_time(3i)'] = ""
        params[:event]['end_time(4i)'] = ""
        params[:event]['end_time(5i)'] = ""
    end
end

Передача пустых строк для всех полей, по-видимому, дает значение NIL для времени окончания.

 28 сент. 2014 г., 15:10
У меня была похожая проблема при отправке пустого / нулевого времени. Ваше решение выше работает, но я должен был проверитьblank? на(5i) так как мое поле времени хранилось, а не в(4i) Титулы. Спасибо за чаевые!
Решение Вопроса

Ваш параметр не [: event] [: end_time], это:

[: событие] ["end_time (1i)"] .. [: событие] ["end_time (5i)"] соответственно.

Если значение параметра nil не поможет, вам нужно отклонить этот ключ из хеша params; например

params[:event].except('end_time(4i)', 'end_time(5i)') if params[:event]['end_time(4i)'].blank?

 ryanio01 июн. 2012 г., 16:17
Спасибо! Почти готово. Если я исключаю end_time, то он не обновит запись до пустых значений, если в ней уже есть значение времени. Любой способ установить его на ноль как-нибудь вместо этого?
 ryanio01 июн. 2012 г., 16:29
Неважно, понял. Еще раз спасибо! Загрузка атрибутов, а затем выполнение до сохранения: @ event.end_time = nil if params [: event] [& end; end_time (4i) & apos;]. Blank?

Ваш ответ на вопрос