2014-10-09 1 views
0

Я надеюсь, что моя неопытность с Rails - причина, по которой никто другой не испытывает эту проблему, и что есть простой ответ. На данный момент, хотя я в тупик. Быстро и грязно то, что у меня есть модель, которая представляет собой ежедневный график (время открытия и закрытия по дате). Когда вы ищете способ проверки этих атрибутов datetime, я наткнулся на несколько потоков здесь, которые предложили использовать камень validates_timeliness, который я сделал. Я написал несколько простых модульных тестов, чтобы проверить правила, которые я хотел, чтобы мой объект придерживался, и, хотя новая проверка, похоже, работает, она не помещает ничего в коллекцию ошибок для объекта ActiveModel.Рельсы: проверка даты с своевременностью, но без сообщений об ошибках

Модель Отрывок:

class OverrideSchedule < ActiveRecord::Base 
    validates :close, :open, :schedule_id, presence: true 
    validates_datetime :open, :after => lambda { DateTime.now }, :after_message => "must be a future date/time" 
    validates_datetime :close, :after => :open, :after_message => "must be after the open date/time" 
    attr_accessible :close, :open, :schedule_id 
end 

Unit Test сниппет:

test "open time must be in the future" do 
    assert past_override_schedule.invalid? #<--- This assert succeeds 
    assert past_override_schedule.errors[:open].any? #<--- This assert fails 
end 

test "close time must be after open time" do 
    assert close_before_open_override_schedule.invalid? #<--- This assert succeeds 
    assert close_before_open_override_schedule.errors[:close].any? #<--- This assert fails 
end 

Я проверил коллекцию .errors с Записывает моих тестов для ЛЮБЫХ ключей и для размера. Не было ключей, и размер был всегда 0. Я пропустил что-то простое в синтаксисе моих утверждений о проверке? Является ли это нормальным, ожидаемым поведением от драгоценности с своевременностью? Я ценю любой вклад, который у вас может быть.

ответ

0

Вам нужно что-то вроде этого:

validate :future_date 



def future_date 
    if open <= Time.now 
    errors.add(:override_schedule, "must be a future date/time") 
    end 
end 

не может быть именно логика вам нужно, но это синтаксис. Сделайте то же самое для второй проверки.

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