2012-03-01 1 views
1

Я использую time_select с подсказкой («Choose hours» ...) и хотел бы убедиться, что пользователь действительно вводит действительное время. Но если форма отправляется без какого-либо времени (так что с выбранными пустыми вариантами запроса), я не получаю никаких ошибок из моей проверки.Rails 3: Как предотвратить мои проверки для передачи «нулевого времени» из выпадающих списков time_select?

Мои Validation:

validates :start_time, :presence => true, :allow_nil => false, :allow_blank => false 

Причина заключается в том, что рельсы превращает вход с полей time_select автоматически в эту дату, когда они пусты:

0001-01-01 00:00:00 

Есть хороший способ предотвратить это от происходящего?

Спасибо!

+0

Это будет обходить проверку a, но что, если вы сделали '<% = f.time_select: field,: value => Time.now%>' [с другими параметрами, которые вы хотите, конечно]? По крайней мере, это займет время. Или вы можете установить временную переменную в своем контроллере, например. '@time_entered = [некоторое время]', а затем используйте '@ time_entered' вместо' Time.now'. – ScottJShea

+1

Я действительно делал это раньше. Но проблема здесь заключается в удобстве использования. Если я устанавливаю время по умолчанию, например. 6 вечера люди забудут выбрать правильное время (потому что валидация никогда не сработает). Вот почему я ищу другое решение. –

+0

Да ... это был хакерский способ сделать это, чтобы быть уверенным. Я только что написал ответ, который, надеюсь, сработает для вас. – ScottJShea

ответ

1

Если вы хотите принудительно провести проверку, похоже, по крайней мере, из этого SO Post и этого SO Post, вы бы хотели выполнить специальную проверку.

class Whatever < ActiveRecord::Base 
    validate :time_scope 
    ... 
    private 
    def time_scope 
     if Whatever.where(<pick the record entered>).time == "0001-01-01 00:00:00" 
     errors.add(:time, "Oh no you didn't enter that garbage time on my watch!") 
     end 
    end 
end 

Очевидно, что это глупый пример, но я надеюсь, что он получит эту идею.

Смежные вопросы